187,33 → 187,11 |
protected function connexion($ressources) { |
$login = $this->getParam('login'); |
$password = $this->getParam('password', null); |
$partenaire = $this->getParam('partner'); |
if ($login == '' || $password == '') { |
$this->erreur("parameters <login> and <password> required"); |
} |
$acces = false; |
$objAuth = null; |
// connexion à un partenaire ? |
if ($partenaire != '') { |
$classeAuth = "AuthPartner" . ucfirst(strtolower($partenaire)); |
try { |
$fichierClasse = "auth/$classeAuth.php"; |
/*if (! file_exists($fichierClasse)) { |
$this->erreur('unknown partner "' . $partenaire . '"'); |
}*/ |
require $fichierClasse; |
$objAuth = new $classeAuth($this); |
// authentification par le partenaire |
$acces = $objAuth->verifierAcces($login, $password); |
} catch(Exception $e) { |
$this->erreur($e->getMessage(), 500); |
} |
} else { |
// authentification locale |
$acces = $this->verifierAcces($login, $password); |
// faux polylmorphisme pour éviter des "if" partout |
$objAuth = new Utilisateur($this->config); |
} |
// vérification login / password |
$acces = $this->verifierAcces($login, $password); |
if ($acces === false) { |
$this->detruireCookie(); |
// redirection si demandée - se charge de sortir du script en cas de succès |
222,7 → 200,8 |
$this->erreur("authentication failed", 401); |
} |
// infos utilisateur |
$infos = $objAuth->getIdentiteParCourriel($login); |
$util = new Utilisateur($this->config); |
$infos = $util->getIdentiteParCourriel($login); |
// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase |
$login = strtolower($login); |
if (count($infos) == 0 || empty($infos[$login])) { |
232,9 → 211,9 |
$this->erreur("could not get user info"); |
} |
// nom Wiki |
$infos[$login]['nomWiki'] = $objAuth->formaterNomWiki($infos[$login], "UnknownWikiName"); |
// date de dernière modification du profil |
$dateDerniereModif = $objAuth->getDateDerniereModifProfil($infos[$login]['id'], true); |
$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName"); |
// date de dernière modification du profi |
$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true); |
$infos[$login]['dateDerniereModif'] = $dateDerniereModif; |
// création du jeton |
$jwt = $this->creerJeton($login, $infos[$login]); |
414,7 → 393,7 |
// décodage d'un jeton expiré |
// @WARNING considère que la lib JWT jette ExpiredException en dernier (vrai 12/05/2015), |
// ce qui signifie que la signature et le domaine sont tout de même valides - à surveiller ! |
$infos = $this->decoderJetonManuellement($jwt); |
$infos = $this->decoderJetonExpireManuellement($jwt); |
} else { |
// on renvoie l'exception plus haut |
throw $e; |
436,10 → 415,10 |
* Décode manuellement un jeton JWT, SANS VÉRIFIER SA SIGNATURE OU |
* SON DOMAINE ! @WARNING ne pas utiliser hors du cas d'un jeton |
* correct (vérifié avec la lib JWT) mais expiré ! |
* Public car utilisé par les classes AuthPartner (@TODO stratégie à valider) |
* |
* @param string $jwt un jeton vérifié comme valide, mais expiré |
*/ |
public function decoderJetonManuellement($jwt) { |
protected function decoderJetonExpireManuellement($jwt) { |
$parts = explode('.', $jwt); |
$payload = $parts[1]; |
$payload = base64_decode($payload); |