Subversion Repositories eFlore/Applications.cel

Rev

Rev 3024 | Rev 3028 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3024 Rev 3027
Line 13... Line 13...
13
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
13
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
14
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
14
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
15
 * @copyright  1999-2015 Tela Botanica <accueil@tela-botanica.org>
15
 * @copyright  1999-2015 Tela Botanica <accueil@tela-botanica.org>
16
 */
16
 */
17
class GestionUtilisateur extends Cel {
17
class GestionUtilisateur extends Cel {
18
		
18
 
-
 
19
	/** contient le jeton SSO décodé, si une authentification a eu lieu avec succès */
-
 
20
	protected $token_decode;
-
 
21
 
19
	public function obtenirIdentiteConnectee() {
22
	public function obtenirIdentiteConnectee() {
20
		$login_utilisateur = $this->getLoginUtilisateurVerifie();
23
		$login_utilisateur = $this->getLoginUtilisateurVerifie();
21
		if ($login_utilisateur) {
24
		if ($login_utilisateur) {
22
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
25
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
23
			$utilisateur['connecte'] = true;
26
			$utilisateur['connecte'] = true;
Line 33... Line 36...
33
			$utilisateur = $utilisateur_existe;
36
			$utilisateur = $utilisateur_existe;
34
			$utilisateur['connecte'] = true;
37
			$utilisateur['connecte'] = true;
35
		}
38
		}
36
		return $utilisateur;
39
		return $utilisateur;
37
	}
40
	}
38
	
41
 
39
	private function chargerInfosUtilisateur($login) {
42
	private function chargerInfosUtilisateur($login) {
-
 
43
		//var_dump($this->token_decode);
40
		$requete = 'SELECT * '.
44
		$requete = 'SELECT * '.
41
				'FROM cel_utilisateurs AS cu '.
45
				'FROM cel_utilisateurs_infos AS cu '.
42
				'WHERE courriel = '.Cel::db()->proteger($login).' '.
46
				'WHERE courriel = '.Cel::db()->proteger($login).' '.
43
				' -- '.__FILE__.':'.__LINE__;
47
				' -- '.__FILE__.':'.__LINE__;
44
		$resultats = Cel::db()->requeter($requete);
48
		$resultats = Cel::db()->requeter($requete);
45
	
49
 
46
		$retour = false;
50
		$retour = false;
47
		if (is_array($resultats) && count($resultats) > 0) {
51
		if (is_array($resultats) && count($resultats) > 0) {
48
			$retour = $resultats[0];
52
			$retour = $resultats[0];
49
		}
53
		} else {
50
		if (is_array($retour) && ($retour['date_premiere_utilisation'] == NULL || $retour['date_premiere_utilisation'] == '0000-00-00 00:00:00')) {
54
			// première connexion au CeL !
51
			$this->initialiserInfosUtilisateur($retour['id_utilisateur']);
55
			$this->initialiserInfosUtilisateur();
52
			$this->affecterDonneesWidgetSaisie($login, $retour);
56
			$this->affecterDonneesWidgetSaisie($login, $retour);
53
		}
57
		}
54
		// booleanisation des valeurs
58
		// booleanisation des valeurs
55
		$retour['admin'] = ($retour['admin'] == 1);
59
		$retour['admin'] = ($retour['admin'] == 1);
56
		$retour['licence_acceptee'] = (isset($retour['licence_acceptee']) && ($retour['licence_acceptee'] == 1));
60
		$retour['licence_acceptee'] = (isset($retour['licence_acceptee']) && ($retour['licence_acceptee'] == 1));
57
		
61
 
58
		return $retour;
62
		return $retour;
59
	}
63
	}
60
	
64
 
61
	private function utilisateurEstAutorise($id_utilisateur) {
65
	private function utilisateurEstAutorise($id_utilisateur) {
62
		$autorise = false;
66
		$autorise = false;
63
		$token = $this->getToken();
67
		$token = $this->getToken();
64
		// TODO: tester si le jeton contient réelement quelque chose ?
68
		// TODO: tester si le jeton contient réelement quelque chose ?
65
		if($token) {
69
		if($token) {
Line 70... Line 74...
70
			// Si l'utilisateur du token est bien le même que celui sur lequel on veut agir : OK
74
			// Si l'utilisateur du token est bien le même que celui sur lequel on veut agir : OK
71
			if($token_decode['id'] == $id_utilisateur) {
75
			if($token_decode['id'] == $id_utilisateur) {
72
				$autorise = true;
76
				$autorise = true;
73
			} else {
77
			} else {
74
				// Sinon on vérifie que l'utilisateur est admin
78
				// Sinon on vérifie que l'utilisateur est admin
75
				$requete = "SELECT admin FROM cel_utilisateurs WHERE id_utilisateur = ".Cel::db()->proteger($token_decode['id']);
79
				$requete = "SELECT admin FROM cel_utilisateurs_infos WHERE id_utilisateur = ".Cel::db()->proteger($token_decode['id']);
76
				$resultat = Cel::db()->requeter($requete);
80
				$resultat = Cel::db()->requeter($requete);
Line 77... Line 81...
77
					
81
					
78
				$admin = false;
82
				$admin = false;
79
				if ($resultat && count($resultat) > 0) {
83
				if ($resultat && count($resultat) > 0) {
Line 96... Line 100...
96
 
100
 
97
			// curl avec les options suivantes ignore le pb de certificat (pour tester en local)
101
			// curl avec les options suivantes ignore le pb de certificat (pour tester en local)
98
			// @TODO CHANGER !
102
			// @TODO CHANGER !
99
			$ch = curl_init();
103
			$ch = curl_init();
100
			$timeout = 5;
104
			$timeout = 5;
-
 
105
			$url = $this->config['identification']['sso_url'].'/verifierjeton?token='.$token;
101
			curl_setopt($ch, CURLOPT_URL, $this->config['identification']['sso_url'].'/verifierjeton?token='.$token);
106
			curl_setopt($ch, CURLOPT_URL, $url);
102
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
107
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
103
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
108
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
104
			// équivalent de "-k"
109
			// équivalent de "-k"
105
			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
110
			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Line 111... Line 116...
111
			$login = ($valide === "true") ? $this->obtenirLoginParToken($token) : false;
116
			$login = ($valide === "true") ? $this->obtenirLoginParToken($token) : false;
112
		}
117
		}
Line 113... Line 118...
113
	
118
	
114
		return $login;
119
		return $login;
-
 
120
	}
-
 
121
 
115
	}
122
	// @WTF doublon avec la méthode du dessus ? Qu'est-ce que c'est que ce bins ?
116
	protected function verifierJeton($jeton) {
123
	protected function verifierJeton($jeton) {
117
		$urlServiceVerification = $this->conteneur->getParametre("urlServiceBaseAuth") . "verifierjeton";
124
		$urlServiceVerification = $this->conteneur->getParametre("urlServiceBaseAuth") . "verifierjeton";
Line 118... Line 125...
118
		$urlServiceVerification .= "?token=" . $jeton;
125
		$urlServiceVerification .= "?token=" . $jeton;
Line 158... Line 165...
158
		}
165
		}
159
		return base64_decode(strtr($input, '-_', '+/'));
166
		return base64_decode(strtr($input, '-_', '+/'));
160
	}
167
	}
Line 161... Line 168...
161
	
168
	
162
	private function obtenirLoginParToken($token) {
169
	private function obtenirLoginParToken($token) {
163
		$token_decode = $this->decoderToken($token);
170
		$this->token_decode = $this->decoderToken($token);
164
		return $token_decode['sub'];
171
		return $this->token_decode['sub'];
Line 165... Line 172...
165
	}
172
	}
166
	
173
	
167
	private function getToken() {
174
	private function getToken() {
Line 187... Line 194...
187
				'licence_acceptee' => false,
194
				'licence_acceptee' => false,
188
				'preferences_utilisateur' => '',
195
				'preferences_utilisateur' => '',
189
				'admin' => false
196
				'admin' => false
190
		);
197
		);
191
	}
198
	}
192
	
199
 
-
 
200
	/**
-
 
201
	 * Lors de la première connexion au CeL, remplis la table cel_utilisateurs_infos avec
-
 
202
	 * les données du jeton SSO 
-
 
203
	 */
193
	private function initialiserInfosUtilisateur($id_utilisateur) {
204
	private function initialiserInfosUtilisateur() {
194
		$requete = 'INSERT INTO cel_utilisateurs_infos '.
205
		$requete = 'INSERT INTO cel_utilisateurs_infos'
195
				'(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation ) '.
206
			. ' (id_utilisateur, intitule, prenom, nom, courriel, admin, licence_acceptee, preferences, date_premiere_utilisation )'
196
				'VALUES '.
207
			. ' VALUES ('
-
 
208
			. Cel::db()->proteger($this->token_decode['id']) . ', '
-
 
209
			. Cel::db()->proteger($this->token_decode['intitule']) . ', '
197
				'('.Cel::db()->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".
210
			. Cel::db()->proteger($this->token_decode['prenom']) . ', '
-
 
211
			. Cel::db()->proteger($this->token_decode['nom']) . ', '
-
 
212
			. Cel::db()->proteger($this->token_decode['sub']) . ', '
-
 
213
			. "'0', '0', NULL, NOW()"
198
				'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '.
214
			. ' ) ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW()'
199
				' -- '.__FILE__.':'.__LINE__;
215
			. ' -- '.__FILE__.':'.__LINE__
-
 
216
		;
200
		Cel::db()->executer($requete);
217
		Cel::db()->executer($requete);
201
	}
218
	}
Line 202... Line 219...
202
	
219
	
203
	/**
220
	/**