Subversion Repositories Applications.annuaire

Rev

Rev 557 | Rev 563 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 557 Rev 559
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']);
-
 
198
			} else {
196
			$this->erreur("authentication failed", 401);
199
				$this->erreur("authentication failed", 401);
197
		}
200
			}
-
 
201
 
-
 
202
		}
198
		// infos utilisateur
203
		// infos utilisateur
199
		$util = new Utilisateur($this->config);
204
		$util = new Utilisateur($this->config);
200
		$infos = $util->getIdentiteParCourriel($login);
205
		$infos = $util->getIdentiteParCourriel($login);
201
		if (count($infos) == 0 || empty($infos[$login])) {
206
		if (count($infos) == 0 || empty($infos[$login])) {
202
			$this->erreur("could not get user info");
207
			$this->erreur("could not get user info");
Line 208... Line 213...
208
		$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
213
		$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
209
		// création du jeton
214
		// création du jeton
210
		$jwt = $this->creerJeton($login, $infos[$login]);
215
		$jwt = $this->creerJeton($login, $infos[$login]);
211
		// création du cookie
216
		// création du cookie
212
		$this->creerCookie($jwt);
217
		$this->creerCookie($jwt);
-
 
218
		
-
 
219
		if(!empty($_GET['redirect_url'])) {
-
 
220
			$this->redirigerAvecJeton($_GET['redirect_url'], $jwt);
-
 
221
		} else {
213
		// envoi
222
			// envoi
214
		$this->envoyerJson(array(
223
			$this->envoyerJson(array(
215
			"session" => true,
224
				"session" => true,
216
			"token" => $jwt,
225
				"token" => $jwt,
217
			"duration" => intval($this->dureeJeton),
226
				"duration" => intval($this->dureeJeton),
218
			"token_id" => $this->nomCookie,
227
				"token_id" => $this->nomCookie,
219
			"last_modif" => $infos[$login]['dateDerniereModif']
228
				"last_modif" => $infos[$login]['dateDerniereModif']
220
		));
229
			));
221
	}
230
		}
-
 
231
	}
Line 222... Line 232...
222
 
232
 
223
	/**
233
	/**
224
	 * Détruit le cookie et renvoie un jeton vide ou NULL - le client
234
	 * Détruit le cookie et renvoie un jeton vide ou NULL - le client
225
	 * devrait toujours remplacer son jeton par celui renvoyé par les
235
	 * devrait toujours remplacer son jeton par celui renvoyé par les
Line 228... Line 238...
228
	protected function deconnexion() {
238
	protected function deconnexion() {
229
		// suppression du cookie
239
		// suppression du cookie
230
		$this->detruireCookie();
240
		$this->detruireCookie();
231
		// envoi d'un jeton null
241
		// envoi d'un jeton null
232
		$jwt = null;
242
		$jwt = null;
-
 
243
		if(!empty($_GET['redirect_url'])) {
-
 
244
			header('Location: '.$_GET['redirect_url']);
-
 
245
		} else {
233
		$this->envoyerJson(array(
246
			$this->envoyerJson(array(
234
			"session" => false,
247
					"session" => false,
235
			"token" => $jwt,
248
					"token" => $jwt,
236
			"token_id" => $this->nomCookie
249
					"token_id" => $this->nomCookie
237
		));
250
			));
238
	}
251
		}
-
 
252
	}
Line 239... Line 253...
239
 
253
 
240
	/**
254
	/**
241
	 * Renvoie un jeton rafraîchi (durée de validité augmentée de $this->dureeJeton
255
	 * Renvoie un jeton rafraîchi (durée de validité augmentée de $this->dureeJeton
242
	 * si l'utilisateur est reconnu comme détenteur d'une session active (cookie valide,
256
	 * si l'utilisateur est reconnu comme détenteur d'une session active (cookie valide,
Line 289... Line 303...
289
			} else {
303
			} else {
290
				// pas de jeton valide passé en paramètre
304
				// pas de jeton valide passé en paramètre
291
				$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>");
292
			}
306
			}
293
		} 
307
		} 
-
 
308
		if(!empty($_GET['redirect_url'])) {
-
 
309
			if ($jetonRetour != null) {
-
 
310
				$this->redirigerAvecJeton($_GET['redirect_url'], $jetonRetour);
-
 
311
			} else {
-
 
312
				header('Location: '.$_GET['redirect_url']);
-
 
313
			}
-
 
314
		} else {
294
		// renvoi jeton
315
			// renvoi jeton
295
		if ($jetonRetour === null) {
316
			if ($jetonRetour === null) {
296
			$this->erreur($erreur);
317
				$this->erreur($erreur);
297
		} else {
318
			} else {
298
			$this->envoyerJson(array(
319
				$this->envoyerJson(array(
Line 301... Line 322...
301
				"duration" => intval($this->dureeJeton),
322
						"duration" => intval($this->dureeJeton),
302
				"token_id" => $this->nomCookie
323
						"token_id" => $this->nomCookie
303
			));
324
				));
304
		}
325
			}
305
	}
326
		}
-
 
327
	}
-
 
328
	
-
 
329
	protected function redirigerAvecJeton($url, $jetonRetour) {
-
 
330
		// dans le cas où une url de redirection est précisée,
-
 
331
		// on est généreux et on précise le jeton dans le header et le get
-
 
332
		if ($jetonRetour != null) {
-
 
333
			$url_redirection = $_GET['redirect_url'];
-
 
334
			$separateur = (parse_url($url_redirection, PHP_URL_QUERY) == NULL) ? '?' : '&';
-
 
335
			$url_redirection .= $separateur.'Authorization='.$jetonRetour;
-
 
336
			header('Authorization: '.$jetonRetour);
-
 
337
		}
-
 
338
		header('Location: '.$url_redirection);
-
 
339
		exit;
-
 
340
	}
Line 306... Line 341...
306
 
341
 
307
	/**
342
	/**
308
	 * 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
309
	 * des détails si non;
344
	 * des détails si non;