Subversion Repositories Applications.annuaire

Compare Revisions

Ignore whitespace Rev 578 → Rev 579

/trunk/jrest/services/Auth.php
187,11 → 187,33
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");
}
// vérification login / password
$acces = $this->verifierAcces($login, $password);
$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);
}
if ($acces === false) {
$this->detruireCookie();
// redirection si demandée - se charge de sortir du script en cas de succès
200,8 → 222,7
$this->erreur("authentication failed", 401);
}
// infos utilisateur
$util = new Utilisateur($this->config);
$infos = $util->getIdentiteParCourriel($login);
$infos = $objAuth->getIdentiteParCourriel($login);
// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
$login = strtolower($login);
if (count($infos) == 0 || empty($infos[$login])) {
211,9 → 232,9
$this->erreur("could not get user info");
}
// nom Wiki
$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName");
// date de dernière modification du profi
$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
$infos[$login]['nomWiki'] = $objAuth->formaterNomWiki($infos[$login], "UnknownWikiName");
// date de dernière modification du profil
$dateDerniereModif = $objAuth->getDateDerniereModifProfil($infos[$login]['id'], true);
$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
// création du jeton
$jwt = $this->creerJeton($login, $infos[$login]);
393,7 → 414,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->decoderJetonExpireManuellement($jwt);
$infos = $this->decoderJetonManuellement($jwt);
} else {
// on renvoie l'exception plus haut
throw $e;
415,10 → 436,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é
*/
protected function decoderJetonExpireManuellement($jwt) {
public function decoderJetonManuellement($jwt) {
$parts = explode('.', $jwt);
$payload = $parts[1];
$payload = base64_decode($payload);