Subversion Repositories Applications.annuaire

Rev

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

Rev 575 Rev 578
Line 192... Line 192...
192
		}
192
		}
193
		// vérification login / password
193
		// vérification login / password
194
		$acces = $this->verifierAcces($login, $password);
194
		$acces = $this->verifierAcces($login, $password);
195
		if ($acces === false) {
195
		if ($acces === false) {
196
			$this->detruireCookie();
196
			$this->detruireCookie();
197
			// redirection si demandée - se charge de sortir du script en cas de succès
197
			// redirection si demandée - se charge de sortir du script en cas de succès
198
			$this->rediriger();
198
			$this->rediriger();
199
			// si la redirection n'a pas eu lieu
199
			// si la redirection n'a pas eu lieu
200
			$this->erreur("authentication failed", 401);
200
			$this->erreur("authentication failed", 401);
201
		}
201
		}
202
		// infos utilisateur
202
		// infos utilisateur
203
		$util = new Utilisateur($this->config);
203
		$util = new Utilisateur($this->config);
204
		$infos = $util->getIdentiteParCourriel($login);
204
		$infos = $util->getIdentiteParCourriel($login);
-
 
205
		// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
-
 
206
		$login = strtolower($login);
205
		if (count($infos) == 0 || empty($infos[$login])) {
207
		if (count($infos) == 0 || empty($infos[$login])) {
206
			// redirection si demandée - se charge de sortir du script en cas de succès
208
			// redirection si demandée - se charge de sortir du script en cas de succès
207
			$this->rediriger();
209
			$this->rediriger();
208
			// si la redirection n'a pas eu lieu
210
			// si la redirection n'a pas eu lieu
209
			$this->erreur("could not get user info");
211
			$this->erreur("could not get user info");
210
		}
212
		}
211
		// nom Wiki
213
		// nom Wiki
212
		$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName");
214
		$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName");
213
		// date de dernière modification du profil
215
		// date de dernière modification du profi
214
		$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
216
		$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
215
		$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
217
		$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
216
		// création du jeton
218
		// création du jeton
217
		$jwt = $this->creerJeton($login, $infos[$login]);
219
		$jwt = $this->creerJeton($login, $infos[$login]);
218
		// création du cookie
220
		// création du cookie
219
		$this->creerCookie($jwt);
221
		$this->creerCookie($jwt);
220
		// redirection si demandée - se charge de sortir du script en cas de succès
222
		// redirection si demandée - se charge de sortir du script en cas de succès
221
		$this->rediriger($jwt);
223
		$this->rediriger($jwt);
222
		// envoi
224
		// envoi
223
		$this->envoyerJson(array(
225
		$this->envoyerJson(array(
224
			"session" => true,
226
			"session" => true,
225
			"token" => $jwt,
227
			"token" => $jwt,
226
			"duration" => intval($this->dureeJeton),
228
			"duration" => intval($this->dureeJeton),
Line 237... Line 239...
237
	protected function deconnexion() {
239
	protected function deconnexion() {
238
		// suppression du cookie
240
		// suppression du cookie
239
		$this->detruireCookie();
241
		$this->detruireCookie();
240
		// envoi d'un jeton null
242
		// envoi d'un jeton null
241
		$jwt = null;
243
		$jwt = null;
242
		// redirection si demandée - se charge de sortir du script en cas de succès
244
		// redirection si demandée - se charge de sortir du script en cas de succès
243
		$this->rediriger();
245
		$this->rediriger();
244
		// si la redirection n'a pas eu lieu
246
		// si la redirection n'a pas eu lieu
245
		$this->envoyerJson(array(
247
		$this->envoyerJson(array(
246
			"session" => false,
248
				"session" => false,
247
			"token" => $jwt,
249
				"token" => $jwt,
248
			"token_id" => $this->nomCookie
250
				"token_id" => $this->nomCookie
249
		));
251
		));
250
	}
252
	}
Line 251... Line 253...
251
 
253
 
252
	/**
254
	/**
Line 300... Line 302...
300
				}
302
				}
301
			} else {
303
			} else {
302
				// pas de jeton valide passé en paramètre
304
				// pas de jeton valide passé en paramètre
303
				$erreur = ($erreur == "" ? "no token or cookie" : "invalid token in cookie / invalid or expired token in Authorization header or parameter <token>");
305
				$erreur = ($erreur == "" ? "no token or cookie" : "invalid token in cookie / invalid or expired token in Authorization header or parameter <token>");
304
			}
306
			}
305
		} 
307
		}
306
		// redirection si demandée - se charge de sortir du script en cas de succès
308
		// redirection si demandée - se charge de sortir du script en cas de succès
307
		$this->rediriger($jetonRetour);
309
		$this->rediriger($jetonRetour);
308
		// renvoi jeton
310
		// renvoi jeton
309
		if ($jetonRetour === null) {
311
		if ($jetonRetour === null) {
310
			$this->erreur($erreur);
312
			$this->erreur($erreur);
311
		} else {
313
		} else {
312
			$this->envoyerJson(array(
314
			$this->envoyerJson(array(
313
				"session" => true,
315
					"session" => true,
314
				"token" => $jetonRetour,
316
					"token" => $jetonRetour,
315
				"duration" => intval($this->dureeJeton),
317
					"duration" => intval($this->dureeJeton),
316
				"token_id" => $this->nomCookie
318
					"token_id" => $this->nomCookie
317
			));
319
			));
318
		}
320
		}
319
	}
321
	}
320
	
322
 
321
	/**
323
	/**
322
	 * Si $_GET['redirect_url'] est non-vide, redirige vers l'URL qu'il contient et sort du programme;
324
	 * Si $_GET['redirect_url'] est non-vide, redirige vers l'URL qu'il contient et sort du programme;
323
	 * sinon, ne fait rien et passe la main
325
	 * sinon, ne fait rien et passe la main
324
	 * 
326
	 * 
325
	 * @param string $jetonRetour jeton JWT à passer à l'URL de destination
327
	 * @param string $jetonRetour jeton JWT à passer à l'URL de destination
326
	 * en GET; par défaut null
328
	 * en GET; par défaut null
327
	 */
329
	 */
328
	protected function rediriger($jetonRetour=null) {
330
	protected function rediriger($jetonRetour=null) {
329
		if (!empty($_GET['redirect_url'])) {
331
		if (!empty($_GET['redirect_url'])) {
330
			// dans le cas où une url de redirection est précisée,
332
			// dans le cas où une url de redirection est précisée,
331
			// on précise le jeton dans le get
333
			// on précise le jeton dans le get
332
			$url_redirection = $_GET['redirect_url'];
334
			$url_redirection = $_GET['redirect_url'];
333
 
335
 
334
			// même si le jeton est vide, on ajoute un paramètre GET Authorization
336
			// même si le jeton est vide, on ajoute un paramètre GET Authorization
335
			// pour spécifier à la cible qu'on a bien traité sa requête - permet
337
			// pour spécifier à la cible qu'on a bien traité sa requête - permet
336
			// aussi de gérer les déconnexions en renvoyant un jeton vide
338
			// aussi de gérer les déconnexions en renvoyant un jeton vide
337
			$separateur = (parse_url($url_redirection, PHP_URL_QUERY) == NULL) ? '?' : '&';
339
			$separateur = (parse_url($url_redirection, PHP_URL_QUERY) == NULL) ? '?' : '&';
338
			$url_redirection .= $separateur.'Authorization='.$jetonRetour;
340
			$url_redirection .= $separateur.'Authorization='.$jetonRetour;
339
 
341
 
340
			// retour à l'envoyeur !
342
			// retour à l'envoyeur !
341
			header('Location: '.$url_redirection);
343
			header('Location: '.$url_redirection);
342
			exit;
344
			exit;
343
		}
345
		}
344
	}
346
	}
Line 345... Line 347...
345
 
347
 
346
	/**
348
	/**
347
	 * Vérifie si un jeton est valide; retourne true si oui, une erreur avec
349
	 * Vérifie si un jeton est valide; retourne true si oui, une erreur avec
348
	 * des détails si non;
350
	 * des détails si non;
Line 655... Line 657...
655
		} else {
657
		} else {
656
			$code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200);
658
			$code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200);
657
		}
659
		}
658
		return $code;
660
		return $code;
659
	}
661
	}
660
}
-
 
661
662
}
-
 
663