Subversion Repositories Applications.annuaire

Rev

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

Rev 562 Rev 563
Line 191... Line 191...
191
		}
191
		}
192
		// vérification login / password
192
		// vérification login / password
193
		$acces = $this->verifierAcces($login, $password);
193
		$acces = $this->verifierAcces($login, $password);
194
		if ($acces === false) {
194
		if ($acces === false) {
195
			$this->detruireCookie();
195
			$this->detruireCookie();
196
			if(!empty($_GET['redirect_url'])) {
-
 
197
				header('Location: '.$_GET['redirect_url']);
196
			// redirection si demandée - se charge de sortir du script en cas de succès
198
				exit;
197
			$this->rediriger();
199
			} else {
198
			// si la redirection n'a pas eu lieu
200
				$this->erreur("authentication failed", 401);
199
			$this->erreur("authentication failed", 401);
201
			}
-
 
202
 
-
 
203
		}
200
		}
204
		// infos utilisateur
201
		// infos utilisateur
205
		$util = new Utilisateur($this->config);
202
		$util = new Utilisateur($this->config);
206
		$infos = $util->getIdentiteParCourriel($login);
203
		$infos = $util->getIdentiteParCourriel($login);
207
		if (count($infos) == 0 || empty($infos[$login])) {
204
		if (count($infos) == 0 || empty($infos[$login])) {
208
			if(!empty($_GET['redirect_url'])) {
-
 
209
				header('Location: '.$_GET['redirect_url']);
205
			// redirection si demandée - se charge de sortir du script en cas de succès
210
				exit;
206
			$this->rediriger();
211
			} else {
207
			// si la redirection n'a pas eu lieu
212
				$this->erreur("could not get user info");
208
			$this->erreur("could not get user info");
213
			}
-
 
214
		}
209
		}
215
		// nom Wiki
210
		// nom Wiki
216
		$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName");
211
		$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName");
217
		// date de dernière modification du profil
212
		// date de dernière modification du profil
218
		$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
213
		$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
219
		$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
214
		$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
220
		// création du jeton
215
		// création du jeton
221
		$jwt = $this->creerJeton($login, $infos[$login]);
216
		$jwt = $this->creerJeton($login, $infos[$login]);
222
		// création du cookie
217
		// création du cookie
223
		$this->creerCookie($jwt);
218
		$this->creerCookie($jwt);
224
		
-
 
225
		if(!empty($_GET['redirect_url'])) {
219
		// redirection si demandée - se charge de sortir du script en cas de succès
226
			$this->redirigerAvecJeton($_GET['redirect_url'], $jwt);
220
		$this->rediriger($jwt);
227
		} else {
-
 
228
			// envoi
221
		// envoi
229
			$this->envoyerJson(array(
222
		$this->envoyerJson(array(
230
				"session" => true,
223
			"session" => true,
231
				"token" => $jwt,
224
			"token" => $jwt,
232
				"duration" => intval($this->dureeJeton),
225
			"duration" => intval($this->dureeJeton),
233
				"token_id" => $this->nomCookie,
226
			"token_id" => $this->nomCookie,
234
				"last_modif" => $infos[$login]['dateDerniereModif']
227
			"last_modif" => $infos[$login]['dateDerniereModif']
235
			));
228
		));
236
		}
-
 
237
	}
229
	}
Line 238... Line 230...
238
 
230
 
239
	/**
231
	/**
240
	 * Détruit le cookie et renvoie un jeton vide ou NULL - le client
232
	 * Détruit le cookie et renvoie un jeton vide ou NULL - le client
Line 244... Line 236...
244
	protected function deconnexion() {
236
	protected function deconnexion() {
245
		// suppression du cookie
237
		// suppression du cookie
246
		$this->detruireCookie();
238
		$this->detruireCookie();
247
		// envoi d'un jeton null
239
		// envoi d'un jeton null
248
		$jwt = null;
240
		$jwt = null;
249
		if(!empty($_GET['redirect_url'])) {
241
		// redirection si demandée - se charge de sortir du script en cas de succès
250
			header('Location: '.$_GET['redirect_url']);
242
		$this->rediriger();
251
		} else {
243
		// si la redirection n'a pas eu lieu
252
			$this->envoyerJson(array(
244
		$this->envoyerJson(array(
253
					"session" => false,
245
				"session" => false,
254
					"token" => $jwt,
246
				"token" => $jwt,
255
					"token_id" => $this->nomCookie
247
				"token_id" => $this->nomCookie
256
			));
248
		));
257
		}
-
 
258
	}
249
	}
Line 259... Line 250...
259
 
250
 
260
	/**
251
	/**
261
	 * Renvoie un jeton rafraîchi (durée de validité augmentée de $this->dureeJeton
252
	 * Renvoie un jeton rafraîchi (durée de validité augmentée de $this->dureeJeton
Line 308... Line 299...
308
				}
299
				}
309
			} else {
300
			} else {
310
				// pas de jeton valide passé en paramètre
301
				// pas de jeton valide passé en paramètre
311
				$erreur = ($erreur == "" ? "no token or cookie" : "invalid token in cookie / invalid or expired token in Authorization header or parameter <token>");
302
				$erreur = ($erreur == "" ? "no token or cookie" : "invalid token in cookie / invalid or expired token in Authorization header or parameter <token>");
312
			}
303
			}
313
		} 
304
		}
314
		if(!empty($_GET['redirect_url'])) {
305
		// redirection si demandée - se charge de sortir du script en cas de succès
315
			if ($jetonRetour != null) {
-
 
316
				$this->redirigerAvecJeton($_GET['redirect_url'], $jetonRetour);
306
		$this->rediriger($jetonRetour);
317
			} else {
307
		// renvoi jeton
318
				header('Location: '.$_GET['redirect_url']);
308
		if ($jetonRetour === null) {
319
			}
309
			$this->erreur($erreur);
320
		} else {
310
		} else {
321
			// renvoi jeton
-
 
322
			if ($jetonRetour === null) {
-
 
323
				$this->erreur($erreur);
-
 
324
			} else {
-
 
325
				$this->envoyerJson(array(
311
			$this->envoyerJson(array(
326
						"session" => true,
312
					"session" => true,
327
						"token" => $jetonRetour,
313
					"token" => $jetonRetour,
328
						"duration" => intval($this->dureeJeton),
314
					"duration" => intval($this->dureeJeton),
329
						"token_id" => $this->nomCookie
315
					"token_id" => $this->nomCookie
330
				));
316
			));
331
			}
-
 
332
		}
317
		}
333
	}
318
	}
334
	
319
 
-
 
320
	/**
-
 
321
	 * Si $_GET['redirect_url'] est non-vide, redirige vers l'URL qu'il contient et sort du programme;
-
 
322
	 * sinon, ne fait rien et passe la main
-
 
323
	 * 
-
 
324
	 * @param string $jetonRetour jeton JWT à passer à l'URL de destination (en GET
-
 
325
	 * et dans le header "Authorization"); par défaut null
-
 
326
	 */
335
	protected function redirigerAvecJeton($url, $jetonRetour) {
327
	protected function rediriger($jetonRetour=null) {
-
 
328
		if (!empty($_GET['redirect_url'])) {
336
		// dans le cas où une url de redirection est précisée,
329
			// dans le cas où une url de redirection est précisée,
337
		// on est généreux et on précise le jeton dans le header et le get
330
			// on est généreux et on précise le jeton dans le header et le get
338
		if ($jetonRetour != null) {
-
 
339
			$url_redirection = $_GET['redirect_url'];
331
			$url_redirection = $_GET['redirect_url'];
-
 
332
			if ($jetonRetour !== null) {
340
			$separateur = (parse_url($url_redirection, PHP_URL_QUERY) == NULL) ? '?' : '&';
333
				$separateur = (parse_url($url_redirection, PHP_URL_QUERY) == NULL) ? '?' : '&';
341
			$url_redirection .= $separateur.'Authorization='.$jetonRetour;
334
				$url_redirection .= $separateur.'Authorization='.$jetonRetour;
342
			header('Authorization: '.$jetonRetour);
335
				header('Authorization: '.$jetonRetour);
-
 
336
			}
-
 
337
			header('Location: '.$url_redirection);
-
 
338
			exit;
343
		}
339
		}
344
		header('Location: '.$url_redirection);
-
 
345
		exit;
-
 
346
	}
340
	}
Line 347... Line 341...
347
 
341
 
348
	/**
342
	/**
349
	 * Vérifie si un jeton est valide; retourne true si oui, une erreur avec
343
	 * Vérifie si un jeton est valide; retourne true si oui, une erreur avec