Subversion Repositories Applications.annuaire

Compare Revisions

Ignore whitespace Rev 579 → Rev 580

/trunk/jrest/services/Auth.php
28,6 → 28,9
/** Nom du cookie */
protected $nomCookie = "this_is_not_a_good_cookie_name";
 
/** Bibliothèque de gestion des utilisateurs */
protected $utilisateur;
 
public function __construct($config, $demarrer_session = true) {
parent::__construct($config, $demarrer_session);
$this->clef = file_get_contents("clef-auth.ini");
38,9 → 41,20
$this->dureeJeton = $this->config['auth']['duree_jeton'];
$this->dureeCookie = $this->config['auth']['duree_cookie'];
$this->nomCookie = $this->config['auth']['nom_cookie'];
// gestion des utilisateurs @WARNING on utilise un service comme une lib, c'est
// mal !! @TODO séparer service et lib (ou réécrire tout ce foutoir)
$this->utilisateur = new Utilisateur($config);
}
 
/**
* Retourne la bobliothèque de gestion des utilisateurs (pour utilisation
* par les classes partenaires)
*/
public function getUtilisateur() {
return $this->utilisateur;
}
 
/**
* Notice d'utilisation succincte
* @TODO essayer de choisir entre anglais et français
*/
192,19 → 206,26
$this->erreur("parameters <login> and <password> required");
}
$acces = false;
$objAuth = null;
// connexion à un partenaire ?
$infosPartenaire = array();
if ($partenaire != '') {
$classeAuth = "AuthPartner" . ucfirst(strtolower($partenaire));
try {
$fichierClasse = "auth/$classeAuth.php";
/*if (! file_exists($fichierClasse)) {
$this->erreur('unknown partner "' . $partenaire . '"');
}*/
$fichierClasse = getcwd() . "/services/auth/$classeAuth.php"; // @TODO vérifier si getcwd() est fiable dans ce cas
if (! file_exists($fichierClasse)) {
$this->erreur("unknown partner '$partenaire'");
}
require $fichierClasse;
$objAuth = new $classeAuth($this);
$authPartenaire = new $classeAuth($this);
// authentification par le partenaire
$acces = $objAuth->verifierAcces($login, $password);
$acces = $authPartenaire->verifierAcces($login, $password);
if ($acces === true) {
// copie des infos dans l'annuaire si besoin
$authPartenaire->synchroniser();
}
// détails à ajouter au jeton local
$infosPartenaire['partenaire'] = $partenaire;
$infosPartenaire['jetonPartenaire'] = $authPartenaire->getJetonPartenaire();
} catch(Exception $e) {
$this->erreur($e->getMessage(), 500);
}
211,8 → 232,6
} 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();
222,7 → 241,8
$this->erreur("authentication failed", 401);
}
// infos utilisateur
$infos = $objAuth->getIdentiteParCourriel($login);
$infos = $this->utilisateur->getIdentiteParCourriel($login);
//var_dump($infos); exit;
// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
$login = strtolower($login);
if (count($infos) == 0 || empty($infos[$login])) {
231,13 → 251,14
// si la redirection n'a pas eu lieu
$this->erreur("could not get user info");
}
// nom Wiki
$infos[$login]['nomWiki'] = $objAuth->formaterNomWiki($infos[$login], "UnknownWikiName");
$infos = $infos[$login];
// date de dernière modification du profil
$dateDerniereModif = $objAuth->getDateDerniereModifProfil($infos[$login]['id'], true);
$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
$dateDerniereModif = $this->utilisateur->getDateDerniereModifProfil($infos['id'], true);
$infos['dateDerniereModif'] = $dateDerniereModif;
// infos partenaire
$infos = array_merge($infos, $infosPartenaire);
// création du jeton
$jwt = $this->creerJeton($login, $infos[$login]);
$jwt = $this->creerJeton($login, $infos);
// création du cookie
$this->creerCookie($jwt);
// redirection si demandée - se charge de sortir du script en cas de succès
248,7 → 269,7
"token" => $jwt,
"duration" => intval($this->dureeJeton),
"token_id" => $this->nomCookie,
"last_modif" => $infos[$login]['dateDerniereModif']
"last_modif" => $infos['dateDerniereModif']
));
}