Subversion Repositories eFlore/Applications.del

Rev

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

Rev 2154 Rev 2156
Line 17... Line 17...
17
class GestionUtilisateur {
17
class GestionUtilisateur {
Line 18... Line 18...
18
 
18
 
19
	protected $conteneur;
19
	protected $conteneur;
20
	protected $contexte;
20
	protected $contexte;
-
 
21
	protected $bdd;
-
 
22
	/** contient le jeton SSO décodé, si une authentification a eu lieu avec succès */
Line 21... Line 23...
21
	protected $bdd;
23
	protected $jetonDecode;
Line 22... Line 24...
22
 
24
 
23
	protected $utilisateur = array();
25
	protected $utilisateur = array();
Line 61... Line 63...
61
	}
63
	}
Line 62... Line 64...
62
 
64
 
63
	/**
65
	/**
64
	 * Recherche un jeton SSO dans l'entête HTTP "Authorization", vérifie ce
66
	 * Recherche un jeton SSO dans l'entête HTTP "Authorization", vérifie ce
-
 
67
	 * jeton auprès de l'annuaire et en cas de succès charge les informations
-
 
68
	 * de l'utilisateur associé; si c'est la première fois que l'utilisateur
-
 
69
	 * utilise DeL, crée un profil local dans del_utilisateurs_infos; si le
65
	 * jeton auprès de l'annuaire et en cas de succès charge les informations
70
	 * profil a changé depuis la dernière connexion, le met à jour ainsi que
66
	 * de l'utilisateur associé
71
	 * les coordonnées dans les commentaires
67
	 * 
72
	 * 
68
	 * @return Array un profil utilisateur ou null
73
	 * @return Array un profil utilisateur ou null
69
	 */
74
	 */
70
	public function getUtilisateurIdentifie() {
75
	public function getUtilisateurIdentifie() {
Line 74... Line 79...
74
		if ($jeton != null) {
79
		if ($jeton != null) {
75
			// validation par l'annuaire
80
			// validation par l'annuaire
76
			$valide = $this->verifierJeton($jeton);
81
			$valide = $this->verifierJeton($jeton);
77
			if ($valide === true) {
82
			if ($valide === true) {
78
				// décodage du courriel utilisateur depuis le jeton
83
				// décodage du courriel utilisateur depuis le jeton
79
				$donneesJeton = $this->decoderJeton($jeton);
84
				$this->jetonDecode = $this->decoderJeton($jeton);
-
 
85
				//var_dump($this->jetonDecode);
80
				if ($donneesJeton != null && $donneesJeton["sub"] != "") {
86
				if ($this->jetonDecode != null && $this->jetonDecode["sub"] != "") {
81
					// récupération de l'utilisateur
87
					// récupération de l'utilisateur
82
					$courriel = $donneesJeton["sub"];
88
					$courriel = $this->jetonDecode["sub"];
83
					$utilisateur = $this->recupererUtilisateurEnBdd($courriel);
89
					$utilisateur = $this->recupererUtilisateurEnBdd($courriel);
-
 
90
					// Si l'utilisateur existe
-
 
91
					if ($utilisateur != null) {
-
 
92
						// profil changé ?
-
 
93
						if ($this->profilAChange($utilisateur)) {
-
 
94
							// mettre à jour les coordonnées dans le profil local
-
 
95
							$this->mettreAJourProfilLocal();
-
 
96
							// mettre à jour auteur commentaires
-
 
97
							$this->mettreAJourCoordonneesDansCommentaires();
-
 
98
							// relire infos
-
 
99
							$utilisateur = $this->recupererUtilisateurEnBdd($courriel);
-
 
100
						}
-
 
101
					} else {
-
 
102
						// première connexion à DeL
-
 
103
						// initialiser infos
-
 
104
						$this->initialiserInfosUtilisateur($this->jetonDecode['id']); // rétrocompat; le paramètre devrait être implicite
-
 
105
						// relire infos
-
 
106
						$utilisateur = $this->recupererUtilisateurEnBdd($courriel);
-
 
107
					}
-
 
108
					$utilisateur = $this->completerInfosUtilisateur($utilisateur);
84
				}
109
				}
85
			}
110
			}
86
		}
111
		}
87
		if ($utilisateur != null) {
-
 
88
			$utilisateur = $this->completerInfosUtilisateur($utilisateur);
-
 
89
		}
112
 
90
		return $utilisateur;
113
		return $utilisateur;
91
	}
114
	}
Line 92... Line 115...
92
 
115
 
-
 
116
	/**
-
 
117
	 * Retourne true si le profil local stocké dans del_utilisateurs_infos
-
 
118
	 * n'est plus à jour par rapport aux informations du jeton SSO; si le
-
 
119
	 * jeton est vide, retourne false pour éviter de tout casser
-
 
120
	 */
-
 
121
	protected function profilAChange($infosDUI) {
-
 
122
		$aChange = false;
-
 
123
		if ($this->jetonDecode != null) {
-
 
124
			$aChange = ($this->jetonDecode['nom'] != $infosDUI['nom'])
-
 
125
				|| ($this->jetonDecode['intitule'] != $infosDUI['intitule'])
-
 
126
				|| ($this->jetonDecode['prenom'] != $infosDUI['prenom']);
-
 
127
		}
-
 
128
		//var_dump($aChange);
-
 
129
		return $aChange;
-
 
130
	}
-
 
131
 
-
 
132
	/**
-
 
133
	 * Met à jour del_utilisateurs_infos en fonction des informations
-
 
134
	 * contenues par le jeton SSO; si ce dernier est vide, ne fait
-
 
135
	 * rien (boulette-proof)
-
 
136
	 */
-
 
137
	protected function mettreAJourProfilLocal() {
-
 
138
		echo "Mise à jour profil local !!";
-
 
139
		if ($this->jetonDecode != null && $this->jetonDecode['id'] != '') {
-
 
140
			$requete = 'UPDATE del_utilisateurs_infos SET'
-
 
141
				. ' nom = ' . $this->bdd->proteger($this->jetonDecode['nom']) . ', '
-
 
142
				. ' intitule = ' . $this->bdd->proteger($this->jetonDecode['intitule']) . ', '
-
 
143
				. ' prenom = ' . $this->bdd->proteger($this->jetonDecode['prenom'])
-
 
144
				. ' WHERE id_utilisateur = ' . $this->bdd->proteger($this->jetonDecode['id'])
-
 
145
				. ' -- '.__FILE__.':'.__LINE__
-
 
146
			;
-
 
147
			//var_dump($requete);
-
 
148
			$this->bdd->executer($requete);
-
 
149
		}
-
 
150
	}
-
 
151
 
-
 
152
	/**
-
 
153
	 * Répercute le nom et le prénom contenus dans le jeton SSO (si au
-
 
154
	 * moins un des deux n'est pas vide) dans tous les commentaires de
-
 
155
	 * l'auteur; si le jeton SSO est vide, ne fait rien (boulette-proof)
-
 
156
	 * 
-
 
157
	 * @TODO gérer l'intitulé un jour
-
 
158
	 */
-
 
159
	protected function mettreAJourCoordonneesDansCommentaires() {
-
 
160
		//echo "Mise à jour obs et images !!";
-
 
161
		if ($this->jetonDecode != null && $this->jetonDecode['id'] != '' && ($this->jetonDecode['nom'] != '' || $this->jetonDecode['prenom'] != '')) {
-
 
162
			$requete = 'UPDATE del_commentaire SET'
-
 
163
				. ' utilis	ateur_nom = ' . $this->bdd->proteger($this->jetonDecode['nom']) . ', '
-
 
164
				. ' utilisateur_prenom = ' . $this->bdd->proteger($this->jetonDecode['prenom'])
-
 
165
				. ' WHERE ce_utilisateur = ' . $this->bdd->proteger($this->jetonDecode['id']) // s'assurer qu'il y a des ' autour de l'ID sans quoi les hash MD5 matcheront !
-
 
166
				. ' -- '.__FILE__.':'.__LINE__
-
 
167
			;
-
 
168
			//var_dump($requete);
-
 
169
			$this->bdd->executer($requete);
-
 
170
		}
-
 
171
	}
-
 
172
 
93
	/**
173
	/**
94
	 * Essaye de trouver un jeton JWT non vide dans l'entête HTTP "Authorization"
174
	 * Essaye de trouver un jeton JWT non vide dans l'entête HTTP "Authorization"
95
	 * 
175
	 * 
96
	 * @return String un jeton JWT ou null
176
	 * @return String un jeton JWT ou null
97
	 */
177
	 */
Line 190... Line 270...
190
	 * @return array les infos de l'utilisateur
270
	 * @return array les infos de l'utilisateur
191
	 */
271
	 */
192
	private function recupererUtilisateurEnBdd($login) {
272
	private function recupererUtilisateurEnBdd($login) {
193
		$loginP = $this->bdd->proteger($login);
273
		$loginP = $this->bdd->proteger($login);
Line 194... Line 274...
194
 
274
 
195
		$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, dui.admin '.
275
		$requete = 'SELECT id_utilisateur, nom, prenom, intitule, courriel, admin'
196
			'FROM del_utilisateur AS du '.
-
 
197
			'	LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
276
			. " FROM del_utilisateur_infos"
198
			"WHERE courriel = $loginP ".
277
			. " WHERE courriel = $loginP"
199
			' -- '.__FILE__.' : '.__LINE__;
278
			. ' -- ' . __FILE__ . ' : ' . __LINE__
200
 
279
		;
201
		return $this->bdd->recuperer($requete);
280
		return $this->bdd->recuperer($requete);
Line 202... Line 281...
202
	}
281
	}
203
 
282
 
Line 286... Line 365...
286
				'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur).' '.
365
				'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur).' '.
287
				' -- '.__FILE__.' : '.__LINE__;
366
				' -- '.__FILE__.' : '.__LINE__;
288
		$prefs_utilisateur = $this->bdd->recuperer($requete);
367
		$prefs_utilisateur = $this->bdd->recuperer($requete);
289
		return $prefs_utilisateur;
368
		return $prefs_utilisateur;
290
	}
369
	}
291
 
370
 
-
 
371
	/**
-
 
372
	 * Ajoute un utilisateur à la table des profils locaux del_utilisateurs_infos;
-
 
373
	 * suppose que l'utilisateur est correctement identifié (jeton décodé disponible)
-
 
374
	 */
292
	public function initialiserInfosUtilisateur($id_utilisateur) {
375
	public function initialiserInfosUtilisateur($id_utilisateur) {
-
 
376
		//var_dump("Initialisation infos utilisateur !!");
293
		$preferences_defaut = $this->obtenirTableauPreferenceDefaut();
377
		$preferences_defaut = $this->obtenirTableauPreferenceDefaut();
294
		$prefsEncodeesP = $this->bdd->proteger(json_encode($preferences_defaut));
378
		$prefsEncodeesP = $this->bdd->proteger(json_encode($preferences_defaut));
295
		$idUtilisateurP = $this->bdd->proteger($id_utilisateur);
379
		$idUtilisateurP = $this->bdd->proteger($id_utilisateur);
-
 
380
		$nomUtilisateurP = $this->bdd->proteger($this->jetonDecode['nom']);
-
 
381
		$prenomUtilisateurP = $this->bdd->proteger($this->jetonDecode['prenom']);
-
 
382
		$courrielUtilisateurP = $this->bdd->proteger($this->jetonDecode['sub']);
-
 
383
		$intituleUtilisateurP = $this->bdd->proteger($this->jetonDecode['intitule']);
-
 
384
 
296
		$requete = 'INSERT INTO del_utilisateur_infos '.
385
		$requete = 'INSERT INTO del_utilisateur_infos '.
297
				'(id_utilisateur, admin, preferences, date_premiere_utilisation )'.
386
				'(id_utilisateur, intitule, prenom, nom, courriel, admin, preferences, date_premiere_utilisation, date_derniere_consultation_evenements )'.
298
				"VALUES ($idUtilisateurP, 0, $prefsEncodeesP, NOW()) ".
387
				"VALUES ($idUtilisateurP, $intituleUtilisateurP, $prenomUtilisateurP, $nomUtilisateurP, $courrielUtilisateurP, 0, $prefsEncodeesP, NOW(), NOW()) ".
299
				'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '.
388
				'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '.
300
				' -- '.__FILE__.' : '.__LINE__;
389
				' -- '.__FILE__.' : '.__LINE__;
301
		return $this->bdd->executer($requete);
390
		return $this->bdd->executer($requete);
302
	}
391
	}