| 579 | mathias | 1 | <?php
 | 
        
           |  |  | 2 |   | 
        
           | 581 | mathias | 3 | /**
 | 
        
           |  |  | 4 |  * Permet au service Auth de connecter l'utilisateur auprès d'un partenaire,
 | 
        
           |  |  | 5 |  * et de synchroniser un compte local
 | 
        
           |  |  | 6 |  * @author mathias
 | 
        
           |  |  | 7 |  */
 | 
        
           | 579 | mathias | 8 | abstract class AuthPartner {
 | 
        
           |  |  | 9 |   | 
        
           |  |  | 10 | 	/** Injection de dépendance du service Auth, pour utiliser les méthodes comme decoderJetonManuellement() */
 | 
        
           | 580 | mathias | 11 | 	protected $auth;
 | 
        
           | 579 | mathias | 12 |   | 
        
           | 605 | mathias | 13 | 	/** Injection de dépendance de la config des services */
 | 
        
           |  |  | 14 | 	protected $config;
 | 
        
           |  |  | 15 |   | 
        
           | 580 | mathias | 16 | 	/** Injection de dépendance de la lib Utilisateur depuis le service Auth */
 | 
        
           |  |  | 17 | 	protected $utilisateur;
 | 
        
           |  |  | 18 |   | 
        
           |  |  | 19 | 	/** Jeton brut retourné par le service d'authentification du partenaire */
 | 
        
           |  |  | 20 | 	protected $jetonPartenaire;
 | 
        
           |  |  | 21 |   | 
        
           |  |  | 22 | 	/** Données décodées depuis le jeton du partenaire */
 | 
        
           | 579 | mathias | 23 | 	protected $data;
 | 
        
           |  |  | 24 |   | 
        
           | 580 | mathias | 25 | 	/** Identifiant de l'utilisateur dans l'annuaire local, ou false s'il n'existe pas */
 | 
        
           |  |  | 26 | 	protected $idLocal;
 | 
        
           |  |  | 27 |   | 
        
           | 605 | mathias | 28 | 	public function __construct($authLib, $config) {
 | 
        
           | 580 | mathias | 29 | 		$this->auth = $authLib;
 | 
        
           | 605 | mathias | 30 | 		$this->config = $config;
 | 
        
           | 580 | mathias | 31 | 		$this->utilisateur = $authLib->getUtilisateur();
 | 
        
           |  |  | 32 | 		$this->idLocal = false;
 | 
        
           | 579 | mathias | 33 | 	}
 | 
        
           |  |  | 34 |   | 
        
           | 580 | mathias | 35 | 	/** Retourne true si l'utilisateur est authentifié par le partenaire */
 | 
        
           | 579 | mathias | 36 | 	public abstract function verifierAcces($login, $password);
 | 
        
           | 580 | mathias | 37 |   | 
        
           |  |  | 38 | 	/**
 | 
        
           |  |  | 39 | 	 * Vérifie si l'annuaire contient déjà une entrée associée au
 | 
        
           |  |  | 40 | 	 * courriel de l'utilisateur et l'ajoute ou la met à jour au besoin
 | 
        
           |  |  | 41 | 	 */
 | 
        
           |  |  | 42 | 	public function synchroniser() {
 | 
        
           |  |  | 43 | 		$courriel = $this->getCourriel();
 | 
        
           |  |  | 44 | 		// l'utilisateur existe-t-il déjà ?
 | 
        
           |  |  | 45 | 		$this->idLocal = $this->utilisateur->getIdParCourriel($courriel);
 | 
        
           |  |  | 46 | 		if ($this->idLocal !== false) {
 | 
        
           |  |  | 47 | 			if (! $this->profilEstAJour()) {
 | 
        
           |  |  | 48 | 				$this->mettreAJourProfil();
 | 
        
           |  |  | 49 | 			}
 | 
        
           |  |  | 50 | 		} else {
 | 
        
           |  |  | 51 | 			$this->inscrireUtilisateur();
 | 
        
           |  |  | 52 | 		}
 | 
        
           |  |  | 53 | 	}
 | 
        
           |  |  | 54 |   | 
        
           |  |  | 55 | 	/**
 | 
        
           |  |  | 56 | 	 * Retourne true si le profil local est à jour par rapport à la date
 | 
        
           |  |  | 57 | 	 * de dernière modification fournie par le partenaire; si une telle
 | 
        
           |  |  | 58 | 	 * date n'existe pas, retourne $retourSiPasDeDate (true par défaut - on
 | 
        
           |  |  | 59 | 	 * ne met pas à jour)
 | 
        
           |  |  | 60 | 	 */
 | 
        
           |  |  | 61 | 	protected function profilEstAJour($retourSiPasDeDate=true) {
 | 
        
           |  |  | 62 | 		$tsMajPartenaire = $this->getTimestampMajPartenaire();
 | 
        
           |  |  | 63 | 		//echo "Timestamp partenaire : "; var_dump($tsMajPartenaire); echo "<br/>";
 | 
        
           |  |  | 64 | 		if ($tsMajPartenaire != null) {
 | 
        
           |  |  | 65 | 			$dateMajLocale = $this->utilisateur->getDateDerniereModifProfil($this->idLocal);
 | 
        
           |  |  | 66 | 			$tsMajLocale = strtotime($dateMajLocale); // attention à ne pas changer le format de date !
 | 
        
           |  |  | 67 | 			//echo "Timestamp local : "; var_dump($tsMajLocale); echo "<br/>";
 | 
        
           |  |  | 68 | 			return ($tsMajLocale >= $tsMajPartenaire);
 | 
        
           |  |  | 69 | 		}
 | 
        
           |  |  | 70 | 		// Si le partenaire ne fournit pas de date, on retourne la valeur par défaut
 | 
        
           |  |  | 71 | 		return $retourSiPasDeDate;
 | 
        
           |  |  | 72 | 	}
 | 
        
           |  |  | 73 |   | 
        
           |  |  | 74 | 	/**
 | 
        
           |  |  | 75 | 	 * Retourne le nom du partenaire en cours
 | 
        
           |  |  | 76 | 	 */
 | 
        
           |  |  | 77 | 	protected abstract function getNomPartenaire();
 | 
        
           |  |  | 78 |   | 
        
           |  |  | 79 | 	/**
 | 
        
           |  |  | 80 | 	 * Retourne le courriel de l'utilisateur fourni par le partenaire
 | 
        
           |  |  | 81 | 	 */
 | 
        
           | 583 | mathias | 82 | 	public abstract function getCourriel();
 | 
        
           | 580 | mathias | 83 |   | 
        
           |  |  | 84 | 	/**
 | 
        
           |  |  | 85 | 	 * Retourne l'identifiant de l'utilisateur fourni par le partenaire
 | 
        
           |  |  | 86 | 	 */
 | 
        
           |  |  | 87 | 	protected abstract function getId();
 | 
        
           |  |  | 88 |   | 
        
           |  |  | 89 | 	/**
 | 
        
           |  |  | 90 | 	 * Retourne le timestamp de dernière mise à jour du profil fournie par le
 | 
        
           |  |  | 91 | 	 * partenaire; par défaut retourne null, ce qui laisse au mécanisme de
 | 
        
           |  |  | 92 | 	 * synchronisation le soin de décider si on met à jour le profil ou non
 | 
        
           |  |  | 93 | 	 */
 | 
        
           |  |  | 94 | 	protected function getTimestampMajPartenaire() {
 | 
        
           |  |  | 95 | 		return null;
 | 
        
           |  |  | 96 | 	}
 | 
        
           |  |  | 97 |   | 
        
           |  |  | 98 | 	/**
 | 
        
           |  |  | 99 | 	 * Retourne le jeton fourni par le partenaire
 | 
        
           |  |  | 100 | 	 */
 | 
        
           |  |  | 101 | 	public function getJetonPartenaire() {
 | 
        
           |  |  | 102 | 		return $this->jetonPartenaire;
 | 
        
           |  |  | 103 | 	}
 | 
        
           |  |  | 104 |   | 
        
           |  |  | 105 | 	/**
 | 
        
           |  |  | 106 | 	 * Retourne un tableau de valeurs correpondant au profil de l'utilisateur,
 | 
        
           |  |  | 107 | 	 * fourni par le partenaire, et contenant au minimum :
 | 
        
           |  |  | 108 | 	 * - nom
 | 
        
           |  |  | 109 | 	 * - prenom
 | 
        
           |  |  | 110 | 	 * - pseudo
 | 
        
           |  |  | 111 | 	 * - email
 | 
        
           |  |  | 112 | 	 * Pour les autres champs possibles, voir AnnuaireModele::inscrireUtilisateurCommeUnGrosPorc()
 | 
        
           |  |  | 113 | 	 */
 | 
        
           |  |  | 114 | 	protected abstract function getValeursProfilPartenaire();
 | 
        
           |  |  | 115 |   | 
        
           |  |  | 116 | 	protected function inscrireUtilisateur() {
 | 
        
           |  |  | 117 | 		$valeursProfil = $this->getValeursProfilPartenaire();
 | 
        
           |  |  | 118 | 		$valeursProfil['partenaire'] = $this->getNomPartenaire();
 | 
        
           |  |  | 119 | 		$valeursProfil['id_partenaire'] = $this->getId();
 | 
        
           |  |  | 120 | 		// gruik gruik
 | 
        
           |  |  | 121 | 		$this->utilisateur->inscrireUtilisateurCommeUnGrosPorc($valeursProfil);
 | 
        
           |  |  | 122 | 	}
 | 
        
           |  |  | 123 |   | 
        
           |  |  | 124 | 	protected function mettreAJourProfil() {
 | 
        
           |  |  | 125 | 		throw new Exception("La mise à jour du profil n'est pas encore prise en charge");
 | 
        
           |  |  | 126 | 		$valeursProfil = $this->getValeursProfilPartenaire();
 | 
        
           |  |  | 127 | 	}
 | 
        
           | 579 | mathias | 128 | }
 |