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'] |
)); |
} |
|