Subversion Repositories Applications.annuaire

Rev

Rev 589 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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