Rev 589 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Permet au service Auth de connecter l'utilisateur auprès d'un partenaire,* et de synchroniser un compte local* @author mathias*/abstract class AuthPartner {/** Injection de dépendance du service Auth, pour utiliser les méthodes comme decoderJetonManuellement() */protected $auth;/** Injection de dépendance de la config des services */protected $config;/** Injection de dépendance de la lib Utilisateur depuis le service Auth */protected $utilisateur;/** Jeton brut retourné par le service d'authentification du partenaire */protected $jetonPartenaire;/** Données décodées depuis le jeton du partenaire */protected $data;/** Identifiant de l'utilisateur dans l'annuaire local, ou false s'il n'existe pas */protected $idLocal;public function __construct($authLib, $config) {$this->auth = $authLib;$this->config = $config;$this->utilisateur = $authLib->getUtilisateur();$this->idLocal = false;}/** Retourne true si l'utilisateur est authentifié par le partenaire */public abstract function verifierAcces($login, $password);/*** Vérifie si l'annuaire contient déjà une entrée associée au* courriel de l'utilisateur et l'ajoute ou la met à jour au besoin*/public function synchroniser() {$courriel = $this->getCourriel();// l'utilisateur existe-t-il déjà ?$this->idLocal = $this->utilisateur->getIdParCourriel($courriel);if ($this->idLocal !== false) {if (! $this->profilEstAJour()) {$this->mettreAJourProfil();}} else {$this->inscrireUtilisateur();}}/*** Retourne true si le profil local est à jour par rapport à la date* de dernière modification fournie par le partenaire; si une telle* date n'existe pas, retourne $retourSiPasDeDate (true par défaut - on* ne met pas à jour)*/protected function profilEstAJour($retourSiPasDeDate=true) {$tsMajPartenaire = $this->getTimestampMajPartenaire();//echo "Timestamp partenaire : "; var_dump($tsMajPartenaire); echo "<br/>";if ($tsMajPartenaire != null) {$dateMajLocale = $this->utilisateur->getDateDerniereModifProfil($this->idLocal);$tsMajLocale = strtotime($dateMajLocale); // attention à ne pas changer le format de date !//echo "Timestamp local : "; var_dump($tsMajLocale); echo "<br/>";return ($tsMajLocale >= $tsMajPartenaire);}// Si le partenaire ne fournit pas de date, on retourne la valeur par défautreturn $retourSiPasDeDate;}/*** Retourne le nom du partenaire en cours*/protected abstract function getNomPartenaire();/*** Retourne le courriel de l'utilisateur fourni par le partenaire*/public abstract function getCourriel();/*** Retourne l'identifiant de l'utilisateur fourni par le partenaire*/protected abstract function getId();/*** Retourne le timestamp de dernière mise à jour du profil fournie par le* partenaire; par défaut retourne null, ce qui laisse au mécanisme de* synchronisation le soin de décider si on met à jour le profil ou non*/protected function getTimestampMajPartenaire() {return null;}/*** Retourne le jeton fourni par le partenaire*/public function getJetonPartenaire() {return $this->jetonPartenaire;}/*** Retourne un tableau de valeurs correpondant au profil de l'utilisateur,* fourni par le partenaire, et contenant au minimum :* - nom* - prenom* - pseudo* Pour les autres champs possibles, voir AnnuaireModele::inscrireUtilisateurCommeUnGrosPorc()*/protected abstract function getValeursProfilPartenaire();protected function inscrireUtilisateur() {$valeursProfil = $this->getValeursProfilPartenaire();$valeursProfil['partenaire'] = $this->getNomPartenaire();$valeursProfil['id_partenaire'] = $this->getId();// gruik gruik$this->utilisateur->inscrireUtilisateurCommeUnGrosPorc($valeursProfil);}protected function mettreAJourProfil() {throw new Exception("La mise à jour du profil n'est pas encore prise en charge");$valeursProfil = $this->getValeursProfilPartenaire();}}