Subversion Repositories Applications.annuaire

Rev

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

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