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 |
}
|