Subversion Repositories Applications.annuaire

Rev

Rev 579 | Rev 583 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 579 Rev 580
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
	/**