Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1054 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1054 Rev 1507
Line 1... Line 1...
1
<?php
1
<?php
-
 
2
 
-
 
3
/**
-
 
4
 * Donne l'utilisateur en cours s'il est connecté, en lisant le cookie SSO
-
 
5
 * 
-
 
6
 * Pour l'instant, utilisé uniquement dans popup_contact
-
 
7
 */
2
class Utilisateur {
8
class Utilisateur {
Line 3... Line -...
3
 
-
 
4
	const NIVEAU_DEBUTANT = 1;
-
 
5
	const NIVEAU_INTERMEDIAIRE = 2;
-
 
6
	const NIVEAU_EXPERT = 3;
-
 
7
 
-
 
8
	private $dureeSauvegarde = null;
-
 
9
	private $nomCookieUtilisateur = '';
-
 
10
	private $nomCookieUtilisateurPersistant = '';
9
 
11
	private $nomCookieNiveau = '';
-
 
12
	private $niveauDefaut = '';
10
	protected $nomCookieSSO = '';
13
	private $urlWsAnnuaire = '';
11
	//protected $urlServiceAnnuaire = '';
14
	private $restClient = null;
-
 
15
 
-
 
16
	private $niveau = null;
12
	protected $urlConnexionSite = '';
17
	private $identifie = false;
13
	protected $identifie = false;
18
	private $courriel = null;
-
 
Line 19... Line 14...
19
	private $md5Mdp = null;
14
	protected $courriel = null;
20
 
-
 
21
	public function __construct(Conteneur $conteneur) {
-
 
22
		$this->dureeSauvegarde = $conteneur->getParametre('cookies.duree');
-
 
23
		$this->nomCookieUtilisateur = $conteneur->getParametre('cookies.utilisateur');
15
 
24
		$this->nomCookieUtilisateurPersistant = $conteneur->getParametre('cookies.utilisateurPersistant');
-
 
25
		$this->nomCookieNiveau = $conteneur->getParametre('cookies.niveau');
16
	public function __construct(Conteneur $conteneur) {
26
		$this->niveauDefaut = $conteneur->getParametre('utilisateur.niveau.defaut');
17
		$this->nomCookieSSO = $conteneur->getParametre('auth.nomCookieSSO');
27
		$this->urlWsAnnuaire = $conteneur->getParametre('baseUrlServicesAnnuaireTpl');
18
		//$this->urlServiceAnnuaire = $conteneur->getParametre('baseUrlServicesAnnuaireTpl');
28
		$this->restClient = $conteneur->getRestClient();
19
		$this->urlConnexionSite = $conteneur->getParametre('auth.baseUrlConnexionSite');
29
		$this->analyserCookies();
20
		$this->lireCookieSSO();
30
	}
-
 
31
 
-
 
32
	public function getCourriel() {
21
	}
-
 
22
 
33
		return $this->courriel;
23
	/**
34
	}
24
	 * Retourne l'adresse email de l'utilisateur actuellement identifié
35
 
25
	 */
36
	public function getNiveau() {
26
	public function getCourriel() {
37
		return $this->niveau;
27
		return $this->courriel;
38
	}
28
	}
39
 
29
 
-
 
30
	/**
40
	public function sauver() {
31
	 * Retourne true si l'utilisateur est en possession d'un cookie qui
41
		setcookie($this->nomCookieNiveau, time()+$this->dureeSauvegarde, '/');
-
 
42
	}
32
	 * l'identifie
43
 
-
 
44
	public function etreIdentifie() {
33
	 */
45
		$this->analyserCookies();
34
	public function estIdentifie() {
46
		return $this->identifie;
35
		return $this->identifie;
47
	}
-
 
48
 
-
 
49
	public function connecter($courriel, $mdp, $persistance = false) {
-
 
50
		$url = sprintf($this->urlWsAnnuaire, 'utilisateur');
-
 
51
		$donnees['methode'] = 'connexion';
-
 
52
		$donnees['courriel'] = $courriel;
-
 
53
		$donnees['mdp'] = $mdp;
36
	}
54
		$donnees['persistance'] = $persistance;
-
 
55
 
-
 
56
		$json = $this->restClient->ajouter($url, $donnees);
-
 
57
		$forceTableauAssociatif = true;
37
 
58
		$resultat = json_decode($json, $forceTableauAssociatif);
38
	/**
59
		return $resultat['identifie'];
-
 
60
	}
39
	 * Retourne l'URL de connexion au SSO
61
 
40
	 */
62
	private function analyserCookies() {
-
 
63
		$this->analyserCookiesIdentite();
41
	public function getUrlConnexion() {
64
		$this->analyserCookiesNiveau();
42
		return $this->urlConnexionSite;
65
	}
43
	}
66
 
44
 
67
	private function analyserCookiesIdentite() {
45
	protected function lireCookieSSO() {
68
		if ($this->identifie == false) {
46
		if (isset($_COOKIE[$this->nomCookieSSO])) {
-
 
47
			$jeton = $_COOKIE[$this->nomCookieSSO];
69
			if (isset($_COOKIE[$this->nomCookieUtilisateurPersistant])) {
48
			// On ne valide pas le jeton car il vient directement du cookie
-
 
49
			// (supposé être sur HTTPS uniquement)
70
				$idTela = $_COOKIE[$this->nomCookieUtilisateurPersistant];
50
			$jetonDecode = $this->decoderJeton($jeton);
71
				$this->extraireMdpEtCourriel($idTela);
51
			//var_dump($jetonDecode); echo "<br><br>";
72
			} else if (isset($_COOKIE[$this->nomCookieUtilisateur])) {
52
			if ($jetonDecode && ! empty($jetonDecode['sub'])) {
73
				$idTela = $_COOKIE[$this->nomCookieUtilisateur];
53
				$this->courriel = $jetonDecode['sub'];
74
				$this->extraireMdpEtCourriel($idTela);
54
				$this->identifie = true;
75
			}
55
			}
Line -... Line 56...
-
 
56
		}
-
 
57
	}
-
 
58
 
76
		}
59
	/**
-
 
60
	 * Décode un jeton SSO et retourne son contenu
-
 
61
	 */
-
 
62
    protected function decoderJeton($jeton) {
77
	}
63
        $parts = explode('.', $jeton);
-
 
64
        $payload = $parts[1];
-
 
65
        $payload = $this->urlsafeB64Decode($payload);
-
 
66
        $payload = json_decode($payload, true);
-
 
67
 
-
 
68
        return $payload;
-
 
69
    }
-
 
70
 
-
 
71
    /**
78
 
72
     * Décode le base64 de manière "urlsafe" (copié de la lib JWT)
79
	private function extraireMdpEtCourriel($idTela) {
73
     */
-
 
74
    protected function urlsafeB64Decode($input) {
-
 
75
        $remainder = strlen($input) % 4;
-
 
76
        if ($remainder) {
-
 
77
            $padlen = 4 - $remainder;
80
		$this->md5Mdp = substr($idTela, 0, 32);
78
            $input .= str_repeat('=', $padlen);
Line 81... Line -...
81
		$this->courriel = substr($idTela, 32);
-
 
82
		$this->identifie = true;
-
 
83
	}
-
 
84
 
-
 
85
	private function analyserCookiesNiveau() {
-
 
86
		$this->niveau = $this->niveauDefaut;
-
 
87
		if (isset($_COOKIE[$this->nomCookieNiveau])) {
79
        }
88
			$this->niveau = $_COOKIE[$this->nomCookieNiveau];
-
 
89
		}
80
        return base64_decode(strtr($input, '-_', '+/'));