Subversion Repositories Applications.annuaire

Rev

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

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