Subversion Repositories Applications.annuaire

Rev

Rev 580 | Rev 583 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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