Line 185... |
Line 185... |
185 |
* @param array $ressources non utilisé
|
185 |
* @param array $ressources non utilisé
|
186 |
*/
|
186 |
*/
|
187 |
protected function connexion($ressources) {
|
187 |
protected function connexion($ressources) {
|
188 |
$login = $this->getParam('login');
|
188 |
$login = $this->getParam('login');
|
189 |
$password = $this->getParam('password', null);
|
189 |
$password = $this->getParam('password', null);
|
- |
|
190 |
$partenaire = $this->getParam('partner');
|
190 |
if ($login == '' || $password == '') {
|
191 |
if ($login == '' || $password == '') {
|
191 |
$this->erreur("parameters <login> and <password> required");
|
192 |
$this->erreur("parameters <login> and <password> required");
|
192 |
}
|
193 |
}
|
- |
|
194 |
$acces = false;
|
- |
|
195 |
$objAuth = null;
|
- |
|
196 |
// connexion à un partenaire ?
|
- |
|
197 |
if ($partenaire != '') {
|
- |
|
198 |
$classeAuth = "AuthPartner" . ucfirst(strtolower($partenaire));
|
- |
|
199 |
try {
|
- |
|
200 |
$fichierClasse = "auth/$classeAuth.php";
|
- |
|
201 |
/*if (! file_exists($fichierClasse)) {
|
- |
|
202 |
$this->erreur('unknown partner "' . $partenaire . '"');
|
- |
|
203 |
}*/
|
- |
|
204 |
require $fichierClasse;
|
- |
|
205 |
$objAuth = new $classeAuth($this);
|
193 |
// vérification login / password
|
206 |
// authentification par le partenaire
|
- |
|
207 |
$acces = $objAuth->verifierAcces($login, $password);
|
- |
|
208 |
} catch(Exception $e) {
|
- |
|
209 |
$this->erreur($e->getMessage(), 500);
|
- |
|
210 |
}
|
- |
|
211 |
} else {
|
- |
|
212 |
// authentification locale
|
194 |
$acces = $this->verifierAcces($login, $password);
|
213 |
$acces = $this->verifierAcces($login, $password);
|
- |
|
214 |
// faux polylmorphisme pour éviter des "if" partout
|
- |
|
215 |
$objAuth = new Utilisateur($this->config);
|
- |
|
216 |
}
|
195 |
if ($acces === false) {
|
217 |
if ($acces === false) {
|
196 |
$this->detruireCookie();
|
218 |
$this->detruireCookie();
|
197 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
219 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
198 |
$this->rediriger();
|
220 |
$this->rediriger();
|
199 |
// si la redirection n'a pas eu lieu
|
221 |
// si la redirection n'a pas eu lieu
|
200 |
$this->erreur("authentication failed", 401);
|
222 |
$this->erreur("authentication failed", 401);
|
201 |
}
|
223 |
}
|
202 |
// infos utilisateur
|
224 |
// infos utilisateur
|
203 |
$util = new Utilisateur($this->config);
|
- |
|
204 |
$infos = $util->getIdentiteParCourriel($login);
|
225 |
$infos = $objAuth->getIdentiteParCourriel($login);
|
205 |
// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
|
226 |
// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
|
206 |
$login = strtolower($login);
|
227 |
$login = strtolower($login);
|
207 |
if (count($infos) == 0 || empty($infos[$login])) {
|
228 |
if (count($infos) == 0 || empty($infos[$login])) {
|
208 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
229 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
209 |
$this->rediriger();
|
230 |
$this->rediriger();
|
210 |
// si la redirection n'a pas eu lieu
|
231 |
// si la redirection n'a pas eu lieu
|
211 |
$this->erreur("could not get user info");
|
232 |
$this->erreur("could not get user info");
|
212 |
}
|
233 |
}
|
213 |
// nom Wiki
|
234 |
// nom Wiki
|
214 |
$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName");
|
235 |
$infos[$login]['nomWiki'] = $objAuth->formaterNomWiki($infos[$login], "UnknownWikiName");
|
215 |
// date de dernière modification du profi
|
236 |
// date de dernière modification du profil
|
216 |
$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
|
237 |
$dateDerniereModif = $objAuth->getDateDerniereModifProfil($infos[$login]['id'], true);
|
217 |
$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
|
238 |
$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
|
218 |
// création du jeton
|
239 |
// création du jeton
|
219 |
$jwt = $this->creerJeton($login, $infos[$login]);
|
240 |
$jwt = $this->creerJeton($login, $infos[$login]);
|
220 |
// création du cookie
|
241 |
// création du cookie
|
221 |
$this->creerCookie($jwt);
|
242 |
$this->creerCookie($jwt);
|
Line 391... |
Line 412... |
391 |
if ($ignorerExpiration === true) {
|
412 |
if ($ignorerExpiration === true) {
|
392 |
// on se fiche qu'il soit expiré
|
413 |
// on se fiche qu'il soit expiré
|
393 |
// décodage d'un jeton expiré
|
414 |
// décodage d'un jeton expiré
|
394 |
// @WARNING considère que la lib JWT jette ExpiredException en dernier (vrai 12/05/2015),
|
415 |
// @WARNING considère que la lib JWT jette ExpiredException en dernier (vrai 12/05/2015),
|
395 |
// ce qui signifie que la signature et le domaine sont tout de même valides - à surveiller !
|
416 |
// ce qui signifie que la signature et le domaine sont tout de même valides - à surveiller !
|
396 |
$infos = $this->decoderJetonExpireManuellement($jwt);
|
417 |
$infos = $this->decoderJetonManuellement($jwt);
|
397 |
} else {
|
418 |
} else {
|
398 |
// on renvoie l'exception plus haut
|
419 |
// on renvoie l'exception plus haut
|
399 |
throw $e;
|
420 |
throw $e;
|
400 |
}
|
421 |
}
|
401 |
}
|
422 |
}
|
Line 413... |
Line 434... |
413 |
|
434 |
|
414 |
/**
|
435 |
/**
|
415 |
* Décode manuellement un jeton JWT, SANS VÉRIFIER SA SIGNATURE OU
|
436 |
* Décode manuellement un jeton JWT, SANS VÉRIFIER SA SIGNATURE OU
|
416 |
* SON DOMAINE ! @WARNING ne pas utiliser hors du cas d'un jeton
|
437 |
* SON DOMAINE ! @WARNING ne pas utiliser hors du cas d'un jeton
|
417 |
* correct (vérifié avec la lib JWT) mais expiré !
|
- |
|
- |
|
438 |
* correct (vérifié avec la lib JWT) mais expiré !
|
418 |
*
|
439 |
* Public car utilisé par les classes AuthPartner (@TODO stratégie à valider)
|
419 |
* @param string $jwt un jeton vérifié comme valide, mais expiré
|
440 |
* @param string $jwt un jeton vérifié comme valide, mais expiré
|
420 |
*/
|
441 |
*/
|
421 |
protected function decoderJetonExpireManuellement($jwt) {
|
442 |
public function decoderJetonManuellement($jwt) {
|
422 |
$parts = explode('.', $jwt);
|
443 |
$parts = explode('.', $jwt);
|
423 |
$payload = $parts[1];
|
444 |
$payload = $parts[1];
|
424 |
$payload = base64_decode($payload);
|
445 |
$payload = base64_decode($payload);
|