19,8 → 19,6 |
protected $conteneur; |
protected $contexte; |
protected $bdd; |
/** contient le jeton SSO décodé, si une authentification a eu lieu avec succès */ |
protected $jetonDecode; |
|
protected $utilisateur = array(); |
|
65,10 → 63,7 |
/** |
* Recherche un jeton SSO dans l'entête HTTP "Authorization", vérifie ce |
* jeton auprès de l'annuaire et en cas de succès charge les informations |
* de l'utilisateur associé; si c'est la première fois que l'utilisateur |
* utilise DeL, crée un profil local dans del_utilisateurs_infos; si le |
* profil a changé depuis la dernière connexion, le met à jour ainsi que |
* les coordonnées dans les commentaires |
* de l'utilisateur associé |
* |
* @return Array un profil utilisateur ou null |
*/ |
81,96 → 76,21 |
$valide = $this->verifierJeton($jeton); |
if ($valide === true) { |
// décodage du courriel utilisateur depuis le jeton |
$this->jetonDecode = $this->decoderJeton($jeton); |
//var_dump($this->jetonDecode); |
if ($this->jetonDecode != null && $this->jetonDecode["sub"] != "") { |
$donneesJeton = $this->decoderJeton($jeton); |
if ($donneesJeton != null && $donneesJeton["sub"] != "") { |
// récupération de l'utilisateur |
$courriel = $this->jetonDecode["sub"]; |
$courriel = $donneesJeton["sub"]; |
$utilisateur = $this->recupererUtilisateurEnBdd($courriel); |
// Si l'utilisateur existe |
if ($utilisateur != null) { |
// profil changé ? |
if ($this->profilAChange($utilisateur)) { |
// mettre à jour les coordonnées dans le profil local |
$this->mettreAJourProfilLocal(); |
// mettre à jour auteur commentaires |
$this->mettreAJourCoordonneesDansCommentaires(); |
// relire infos |
$utilisateur = $this->recupererUtilisateurEnBdd($courriel); |
} |
} else { |
// première connexion à DeL |
// initialiser infos |
$this->initialiserInfosUtilisateur($this->jetonDecode['id']); // rétrocompat; le paramètre devrait être implicite |
// relire infos |
$utilisateur = $this->recupererUtilisateurEnBdd($courriel); |
} |
$utilisateur = $this->completerInfosUtilisateur($utilisateur); |
} |
} |
} |
|
if ($utilisateur != null) { |
$utilisateur = $this->completerInfosUtilisateur($utilisateur); |
} |
return $utilisateur; |
} |
|
/** |
* Retourne true si le profil local stocké dans del_utilisateurs_infos |
* n'est plus à jour par rapport aux informations du jeton SSO; si le |
* jeton est vide, retourne false pour éviter de tout casser |
*/ |
protected function profilAChange($infosDUI) { |
$aChange = false; |
if ($this->jetonDecode != null) { |
$aChange = ($this->jetonDecode['nom'] != $infosDUI['nom']) |
|| ($this->jetonDecode['intitule'] != $infosDUI['intitule']) |
|| ($this->jetonDecode['prenom'] != $infosDUI['prenom']); |
} |
//var_dump($aChange); |
return $aChange; |
} |
|
/** |
* Met à jour del_utilisateurs_infos en fonction des informations |
* contenues par le jeton SSO; si ce dernier est vide, ne fait |
* rien (boulette-proof) |
*/ |
protected function mettreAJourProfilLocal() { |
echo "Mise à jour profil local !!"; |
if ($this->jetonDecode != null && $this->jetonDecode['id'] != '') { |
$requete = 'UPDATE del_utilisateurs_infos SET' |
. ' nom = ' . $this->bdd->proteger($this->jetonDecode['nom']) . ', ' |
. ' intitule = ' . $this->bdd->proteger($this->jetonDecode['intitule']) . ', ' |
. ' prenom = ' . $this->bdd->proteger($this->jetonDecode['prenom']) |
. ' WHERE id_utilisateur = ' . $this->bdd->proteger($this->jetonDecode['id']) |
. ' -- '.__FILE__.':'.__LINE__ |
; |
//var_dump($requete); |
$this->bdd->executer($requete); |
} |
} |
|
/** |
* Répercute le nom et le prénom contenus dans le jeton SSO (si au |
* moins un des deux n'est pas vide) dans tous les commentaires de |
* l'auteur; si le jeton SSO est vide, ne fait rien (boulette-proof) |
* |
* @TODO gérer l'intitulé un jour |
*/ |
protected function mettreAJourCoordonneesDansCommentaires() { |
//echo "Mise à jour obs et images !!"; |
if ($this->jetonDecode != null && $this->jetonDecode['id'] != '' && ($this->jetonDecode['nom'] != '' || $this->jetonDecode['prenom'] != '')) { |
$requete = 'UPDATE del_commentaire SET' |
. ' utilis ateur_nom = ' . $this->bdd->proteger($this->jetonDecode['nom']) . ', ' |
. ' utilisateur_prenom = ' . $this->bdd->proteger($this->jetonDecode['prenom']) |
. ' 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 ! |
. ' -- '.__FILE__.':'.__LINE__ |
; |
//var_dump($requete); |
$this->bdd->executer($requete); |
} |
} |
|
/** |
* Essaye de trouver un jeton JWT non vide dans l'entête HTTP "Authorization" |
* |
* @return String un jeton JWT ou null |
272,11 → 192,12 |
private function recupererUtilisateurEnBdd($login) { |
$loginP = $this->bdd->proteger($login); |
|
$requete = 'SELECT id_utilisateur, nom, prenom, intitule, courriel, admin' |
. " FROM del_utilisateur_infos" |
. " WHERE courriel = $loginP" |
. ' -- ' . __FILE__ . ' : ' . __LINE__ |
; |
$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, dui.admin '. |
'FROM del_utilisateur AS du '. |
' LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '. |
"WHERE courriel = $loginP ". |
' -- '.__FILE__.' : '.__LINE__; |
|
return $this->bdd->recuperer($requete); |
} |
|
367,24 → 288,14 |
$prefs_utilisateur = $this->bdd->recuperer($requete); |
return $prefs_utilisateur; |
} |
|
/** |
* Ajoute un utilisateur à la table des profils locaux del_utilisateurs_infos; |
* suppose que l'utilisateur est correctement identifié (jeton décodé disponible) |
*/ |
public function initialiserInfosUtilisateur($id_utilisateur) { |
//var_dump("Initialisation infos utilisateur !!"); |
|
public function initialiserInfosUtilisateur($id_utilisateur) { |
$preferences_defaut = $this->obtenirTableauPreferenceDefaut(); |
$prefsEncodeesP = $this->bdd->proteger(json_encode($preferences_defaut)); |
$idUtilisateurP = $this->bdd->proteger($id_utilisateur); |
$nomUtilisateurP = $this->bdd->proteger($this->jetonDecode['nom']); |
$prenomUtilisateurP = $this->bdd->proteger($this->jetonDecode['prenom']); |
$courrielUtilisateurP = $this->bdd->proteger($this->jetonDecode['sub']); |
$intituleUtilisateurP = $this->bdd->proteger($this->jetonDecode['intitule']); |
|
$idUtilisateurP = $this->bdd->proteger($id_utilisateur); |
$requete = 'INSERT INTO del_utilisateur_infos '. |
'(id_utilisateur, intitule, prenom, nom, courriel, admin, preferences, date_premiere_utilisation, date_derniere_consultation_evenements )'. |
"VALUES ($idUtilisateurP, $intituleUtilisateurP, $prenomUtilisateurP, $nomUtilisateurP, $courrielUtilisateurP, 0, $prefsEncodeesP, NOW(), NOW()) ". |
'(id_utilisateur, admin, preferences, date_premiere_utilisation )'. |
"VALUES ($idUtilisateurP, 0, $prefsEncodeesP, NOW()) ". |
'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '. |
' -- '.__FILE__.' : '.__LINE__; |
return $this->bdd->executer($requete); |