Subversion Repositories Applications.annuaire

Rev

Rev 589 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
 
604 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
 
604 mathias 28
	public function __construct($authLib, $config) {
580 mathias 29
		$this->auth = $authLib;
604 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
}