Subversion Repositories Applications.annuaire

Rev

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

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