Line 26... |
Line 26... |
26 |
protected $dureeCookie = 31536000; // 3600 * 24 * 365
|
26 |
protected $dureeCookie = 31536000; // 3600 * 24 * 365
|
Line 27... |
Line 27... |
27 |
|
27 |
|
28 |
/** Nom du cookie */
|
28 |
/** Nom du cookie */
|
Line -... |
Line 29... |
- |
|
29 |
protected $nomCookie = "this_is_not_a_good_cookie_name";
|
- |
|
30 |
|
- |
|
31 |
/** Bibliothèque de gestion des utilisateurs */
|
29 |
protected $nomCookie = "this_is_not_a_good_cookie_name";
|
32 |
protected $utilisateur;
|
30 |
|
33 |
|
31 |
public function __construct($config, $demarrer_session = true) {
|
34 |
public function __construct($config, $demarrer_session = true) {
|
32 |
parent::__construct($config, $demarrer_session);
|
35 |
parent::__construct($config, $demarrer_session);
|
33 |
$this->clef = file_get_contents("clef-auth.ini");
|
36 |
$this->clef = file_get_contents("clef-auth.ini");
|
34 |
if (strlen($this->clef) < 16) {
|
37 |
if (strlen($this->clef) < 16) {
|
35 |
throw new Exception("Clef trop courte - placez une clef d'au moins 16 caractères dans configurations/clef-auth.ini");
|
38 |
throw new Exception("Clef trop courte - placez une clef d'au moins 16 caractères dans configurations/clef-auth.ini");
|
36 |
}
|
39 |
}
|
37 |
$this->forcerSSL = ($this->config['auth']['forcer_ssl'] == "1");
|
40 |
$this->forcerSSL = ($this->config['auth']['forcer_ssl'] == "1");
|
38 |
$this->dureeJeton = $this->config['auth']['duree_jeton'];
|
41 |
$this->dureeJeton = $this->config['auth']['duree_jeton'];
|
- |
|
42 |
$this->dureeCookie = $this->config['auth']['duree_cookie'];
|
- |
|
43 |
$this->nomCookie = $this->config['auth']['nom_cookie'];
|
- |
|
44 |
// gestion des utilisateurs @WARNING on utilise un service comme une lib, c'est
|
- |
|
45 |
// mal !! @TODO séparer service et lib (ou réécrire tout ce foutoir)
|
- |
|
46 |
$this->utilisateur = new Utilisateur($config);
|
- |
|
47 |
}
|
- |
|
48 |
|
- |
|
49 |
/**
|
- |
|
50 |
* Retourne la bobliothèque de gestion des utilisateurs (pour utilisation
|
- |
|
51 |
* par les classes partenaires)
|
- |
|
52 |
*/
|
39 |
$this->dureeCookie = $this->config['auth']['duree_cookie'];
|
53 |
public function getUtilisateur() {
|
Line 40... |
Line 54... |
40 |
$this->nomCookie = $this->config['auth']['nom_cookie'];
|
54 |
return $this->utilisateur;
|
41 |
}
|
55 |
}
|
42 |
|
56 |
|
Line 190... |
Line 204... |
190 |
$partenaire = $this->getParam('partner');
|
204 |
$partenaire = $this->getParam('partner');
|
191 |
if ($login == '' || $password == '') {
|
205 |
if ($login == '' || $password == '') {
|
192 |
$this->erreur("parameters <login> and <password> required");
|
206 |
$this->erreur("parameters <login> and <password> required");
|
193 |
}
|
207 |
}
|
194 |
$acces = false;
|
208 |
$acces = false;
|
195 |
$objAuth = null;
|
- |
|
196 |
// connexion à un partenaire ?
|
209 |
// connexion à un partenaire ?
|
- |
|
210 |
$infosPartenaire = array();
|
197 |
if ($partenaire != '') {
|
211 |
if ($partenaire != '') {
|
198 |
$classeAuth = "AuthPartner" . ucfirst(strtolower($partenaire));
|
212 |
$classeAuth = "AuthPartner" . ucfirst(strtolower($partenaire));
|
199 |
try {
|
213 |
try {
|
200 |
$fichierClasse = "auth/$classeAuth.php";
|
214 |
$fichierClasse = getcwd() . "/services/auth/$classeAuth.php"; // @TODO vérifier si getcwd() est fiable dans ce cas
|
201 |
/*if (! file_exists($fichierClasse)) {
|
215 |
if (! file_exists($fichierClasse)) {
|
202 |
$this->erreur('unknown partner "' . $partenaire . '"');
|
216 |
$this->erreur("unknown partner '$partenaire'");
|
203 |
}*/
|
217 |
}
|
204 |
require $fichierClasse;
|
218 |
require $fichierClasse;
|
205 |
$objAuth = new $classeAuth($this);
|
219 |
$authPartenaire = new $classeAuth($this);
|
206 |
// authentification par le partenaire
|
220 |
// authentification par le partenaire
|
207 |
$acces = $objAuth->verifierAcces($login, $password);
|
221 |
$acces = $authPartenaire->verifierAcces($login, $password);
|
- |
|
222 |
if ($acces === true) {
|
- |
|
223 |
// copie des infos dans l'annuaire si besoin
|
- |
|
224 |
$authPartenaire->synchroniser();
|
- |
|
225 |
}
|
- |
|
226 |
// détails à ajouter au jeton local
|
- |
|
227 |
$infosPartenaire['partenaire'] = $partenaire;
|
- |
|
228 |
$infosPartenaire['jetonPartenaire'] = $authPartenaire->getJetonPartenaire();
|
208 |
} catch(Exception $e) {
|
229 |
} catch(Exception $e) {
|
209 |
$this->erreur($e->getMessage(), 500);
|
230 |
$this->erreur($e->getMessage(), 500);
|
210 |
}
|
231 |
}
|
211 |
} else {
|
232 |
} else {
|
212 |
// authentification locale
|
233 |
// authentification locale
|
213 |
$acces = $this->verifierAcces($login, $password);
|
234 |
$acces = $this->verifierAcces($login, $password);
|
214 |
// faux polylmorphisme pour éviter des "if" partout
|
- |
|
215 |
$objAuth = new Utilisateur($this->config);
|
- |
|
216 |
}
|
235 |
}
|
217 |
if ($acces === false) {
|
236 |
if ($acces === false) {
|
218 |
$this->detruireCookie();
|
237 |
$this->detruireCookie();
|
219 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
238 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
220 |
$this->rediriger();
|
239 |
$this->rediriger();
|
221 |
// si la redirection n'a pas eu lieu
|
240 |
// si la redirection n'a pas eu lieu
|
222 |
$this->erreur("authentication failed", 401);
|
241 |
$this->erreur("authentication failed", 401);
|
223 |
}
|
242 |
}
|
224 |
// infos utilisateur
|
243 |
// infos utilisateur
|
225 |
$infos = $objAuth->getIdentiteParCourriel($login);
|
244 |
$infos = $this->utilisateur->getIdentiteParCourriel($login);
|
- |
|
245 |
//var_dump($infos); exit;
|
226 |
// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
|
246 |
// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
|
227 |
$login = strtolower($login);
|
247 |
$login = strtolower($login);
|
228 |
if (count($infos) == 0 || empty($infos[$login])) {
|
248 |
if (count($infos) == 0 || empty($infos[$login])) {
|
229 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
249 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
230 |
$this->rediriger();
|
250 |
$this->rediriger();
|
231 |
// si la redirection n'a pas eu lieu
|
251 |
// si la redirection n'a pas eu lieu
|
232 |
$this->erreur("could not get user info");
|
252 |
$this->erreur("could not get user info");
|
233 |
}
|
253 |
}
|
234 |
// nom Wiki
|
254 |
$infos = $infos[$login];
|
235 |
$infos[$login]['nomWiki'] = $objAuth->formaterNomWiki($infos[$login], "UnknownWikiName");
|
- |
|
236 |
// date de dernière modification du profil
|
255 |
// date de dernière modification du profil
|
237 |
$dateDerniereModif = $objAuth->getDateDerniereModifProfil($infos[$login]['id'], true);
|
256 |
$dateDerniereModif = $this->utilisateur->getDateDerniereModifProfil($infos['id'], true);
|
238 |
$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
|
257 |
$infos['dateDerniereModif'] = $dateDerniereModif;
|
- |
|
258 |
// infos partenaire
|
- |
|
259 |
$infos = array_merge($infos, $infosPartenaire);
|
239 |
// création du jeton
|
260 |
// création du jeton
|
240 |
$jwt = $this->creerJeton($login, $infos[$login]);
|
261 |
$jwt = $this->creerJeton($login, $infos);
|
241 |
// création du cookie
|
262 |
// création du cookie
|
242 |
$this->creerCookie($jwt);
|
263 |
$this->creerCookie($jwt);
|
243 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
264 |
// redirection si demandée - se charge de sortir du script en cas de succès
|
244 |
$this->rediriger($jwt);
|
265 |
$this->rediriger($jwt);
|
245 |
// envoi
|
266 |
// envoi
|
246 |
$this->envoyerJson(array(
|
267 |
$this->envoyerJson(array(
|
247 |
"session" => true,
|
268 |
"session" => true,
|
248 |
"token" => $jwt,
|
269 |
"token" => $jwt,
|
249 |
"duration" => intval($this->dureeJeton),
|
270 |
"duration" => intval($this->dureeJeton),
|
250 |
"token_id" => $this->nomCookie,
|
271 |
"token_id" => $this->nomCookie,
|
251 |
"last_modif" => $infos[$login]['dateDerniereModif']
|
272 |
"last_modif" => $infos['dateDerniereModif']
|
252 |
));
|
273 |
));
|
253 |
}
|
274 |
}
|
Line 254... |
Line 275... |
254 |
|
275 |
|
255 |
/**
|
276 |
/**
|