Subversion Repositories Applications.annuaire

Rev

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

Rev 576 Rev 579
Line 185... Line 185...
185
	 * @param array $ressources non utilisé
185
	 * @param array $ressources non utilisé
186
	 */
186
	 */
187
	protected function connexion($ressources) {
187
	protected function connexion($ressources) {
188
		$login = $this->getParam('login');
188
		$login = $this->getParam('login');
189
		$password = $this->getParam('password', null);
189
		$password = $this->getParam('password', null);
-
 
190
		$partenaire = $this->getParam('partner');
190
		if ($login == '' || $password == '') {
191
		if ($login == '' || $password == '') {
191
			$this->erreur("parameters <login> and <password> required");
192
			$this->erreur("parameters <login> and <password> required");
192
		}
193
		}
-
 
194
		$acces = false;
-
 
195
		$objAuth = null;
-
 
196
		// connexion à un partenaire ?
-
 
197
		if ($partenaire != '') {
-
 
198
			$classeAuth = "AuthPartner" . ucfirst(strtolower($partenaire));
-
 
199
			try {
-
 
200
				$fichierClasse = "auth/$classeAuth.php";
-
 
201
				/*if (! file_exists($fichierClasse)) {
-
 
202
					$this->erreur('unknown partner "' . $partenaire . '"');
-
 
203
				}*/
-
 
204
				require $fichierClasse;
-
 
205
				$objAuth = new $classeAuth($this);
193
		// vérification login / password
206
				// authentification par le partenaire
-
 
207
				$acces = $objAuth->verifierAcces($login, $password);
-
 
208
			} catch(Exception $e) {
-
 
209
				$this->erreur($e->getMessage(), 500);
-
 
210
			}
-
 
211
		} else {
-
 
212
			// authentification locale
194
		$acces = $this->verifierAcces($login, $password);
213
			$acces = $this->verifierAcces($login, $password);
-
 
214
			// faux polylmorphisme pour éviter des "if" partout
-
 
215
			$objAuth = new Utilisateur($this->config);
-
 
216
		}
195
		if ($acces === false) {
217
		if ($acces === false) {
196
			$this->detruireCookie();
218
			$this->detruireCookie();
197
			// redirection si demandée - se charge de sortir du script en cas de succès
219
			// redirection si demandée - se charge de sortir du script en cas de succès
198
			$this->rediriger();
220
			$this->rediriger();
199
			// si la redirection n'a pas eu lieu
221
			// si la redirection n'a pas eu lieu
200
			$this->erreur("authentication failed", 401);
222
			$this->erreur("authentication failed", 401);
201
		}
223
		}
202
		// infos utilisateur
224
		// infos utilisateur
203
		$util = new Utilisateur($this->config);
-
 
204
		$infos = $util->getIdentiteParCourriel($login);
225
		$infos = $objAuth->getIdentiteParCourriel($login);
205
		// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
226
		// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
206
		$login = strtolower($login);
227
		$login = strtolower($login);
207
		if (count($infos) == 0 || empty($infos[$login])) {
228
		if (count($infos) == 0 || empty($infos[$login])) {
208
			// redirection si demandée - se charge de sortir du script en cas de succès
229
			// redirection si demandée - se charge de sortir du script en cas de succès
209
			$this->rediriger();
230
			$this->rediriger();
210
			// si la redirection n'a pas eu lieu
231
			// si la redirection n'a pas eu lieu
211
			$this->erreur("could not get user info");
232
			$this->erreur("could not get user info");
212
		}
233
		}
213
		// nom Wiki
234
		// nom Wiki
214
		$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName");
235
		$infos[$login]['nomWiki'] = $objAuth->formaterNomWiki($infos[$login], "UnknownWikiName");
215
		// date de dernière modification du profi
236
		// date de dernière modification du profil
216
		$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
237
		$dateDerniereModif = $objAuth->getDateDerniereModifProfil($infos[$login]['id'], true);
217
		$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
238
		$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
218
		// création du jeton
239
		// création du jeton
219
		$jwt = $this->creerJeton($login, $infos[$login]);
240
		$jwt = $this->creerJeton($login, $infos[$login]);
220
		// création du cookie
241
		// création du cookie
221
		$this->creerCookie($jwt);
242
		$this->creerCookie($jwt);
Line 391... Line 412...
391
			if ($ignorerExpiration === true) {
412
			if ($ignorerExpiration === true) {
392
				// on se fiche qu'il soit expiré
413
				// on se fiche qu'il soit expiré
393
				// décodage d'un jeton expiré 
414
				// décodage d'un jeton expiré 
394
				// @WARNING considère que la lib JWT jette ExpiredException en dernier (vrai 12/05/2015),
415
				// @WARNING considère que la lib JWT jette ExpiredException en dernier (vrai 12/05/2015),
395
				// ce qui signifie que la signature et le domaine sont tout de même valides - à surveiller !
416
				// ce qui signifie que la signature et le domaine sont tout de même valides - à surveiller !
396
				$infos = $this->decoderJetonExpireManuellement($jwt);
417
				$infos = $this->decoderJetonManuellement($jwt);
397
			} else {
418
			} else {
398
				// on renvoie l'exception plus haut
419
				// on renvoie l'exception plus haut
399
				throw $e;
420
				throw $e;
400
			}
421
			}
401
		}
422
		}
Line 413... Line 434...
413
 
434
 
414
	/**
435
	/**
415
	 * Décode manuellement un jeton JWT, SANS VÉRIFIER SA SIGNATURE OU
436
	 * Décode manuellement un jeton JWT, SANS VÉRIFIER SA SIGNATURE OU
416
	 * SON DOMAINE ! @WARNING ne pas utiliser hors du cas d'un jeton
437
	 * SON DOMAINE ! @WARNING ne pas utiliser hors du cas d'un jeton
417
	 * correct (vérifié avec la lib JWT) mais expiré !
-
 
-
 
438
	 * correct (vérifié avec la lib JWT) mais expiré !
418
	 * 
439
	 * Public car utilisé par les classes AuthPartner (@TODO stratégie à valider)
419
	 * @param string $jwt un jeton vérifié comme valide, mais expiré
440
	 * @param string $jwt un jeton vérifié comme valide, mais expiré
420
	 */
441
	 */
421
	protected function decoderJetonExpireManuellement($jwt) {
442
	public function decoderJetonManuellement($jwt) {
422
		$parts = explode('.', $jwt);
443
		$parts = explode('.', $jwt);
423
		$payload = $parts[1];
444
		$payload = $parts[1];
424
		$payload = base64_decode($payload);
445
		$payload = base64_decode($payload);