Subversion Repositories eFlore/Applications.coel

Rev

Rev 1936 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1936 Rev 1950
Line 92... Line 92...
92
					// récupération de l'utilisateur
92
					// récupération de l'utilisateur
93
					$courriel = $donneesJeton["sub"];
93
					$courriel = $donneesJeton["sub"];
Line 94... Line 94...
94
 
94
 
95
					// lecture des infos dans l'annuaire (relou mais nécessaire pour la copie dans la table Personnes de CoeL)
95
					// lecture des infos dans l'annuaire (relou mais nécessaire pour la copie dans la table Personnes de CoeL)
-
 
96
					$infosAnnuaire = $this->obtenirInfosAnnuaire($courriel);
96
					$infosAnnuaire = $this->obtenirInfosAnnuaire($courriel);
97
					$infosAnnuaire['courriel'] = $courriel;
97
					$this->setInfosAnnuaire($infosAnnuaire);
98
					$this->setInfosAnnuaire($infosAnnuaire);
Line 98... Line 99...
98
					//echo "Infos Annu: "; var_dump($infosAnnuaire);
99
					//echo "Infos Annu: "; var_dump($infosAnnuaire);
99
 
100
 
Line 105... Line 106...
105
					if (!is_null($infosAnnuaire) &&  $this->avoirBesoinMiseAJour($utilisateur_existant)) {
106
					if (!is_null($infosAnnuaire) &&  $this->avoirBesoinMiseAJour($utilisateur_existant)) {
106
						$this->debug[] = "Besoin d'une mise à jour";
107
						$this->debug[] = "Besoin d'une mise à jour";
Line 107... Line 108...
107
 
108
 
108
						$presence_dans_coel = ($utilisateur_existant != false); // si on l'a trouvé juste au dessus
109
						$presence_dans_coel = ($utilisateur_existant != false); // si on l'a trouvé juste au dessus
109
						$this->debug[] = "Presence: $presence_dans_coel";
110
						$this->debug[] = "Presence: $presence_dans_coel";
110
						$mot_de_passe_sha1 = $infosAnnuaire['pass'];
111
						//$mot_de_passe_sha1 = $infosAnnuaire['pass'];
Line 111... Line 112...
111
						//echo "MDP: " .$mot_de_passe_sha1;
112
						//echo "MDP: " .$mot_de_passe_sha1;
112
 
113
 
113
						if ($presence_dans_coel) {
114
						if ($presence_dans_coel) {
114
							// Nécessite de faire une mise à jour
115
							// Nécessite de faire une mise à jour
115
							$this->debug[] = "Mise à jour de l'utilisateur {$infosAnnuaire['id']}";
116
							$this->debug[] = "Mise à jour de l'utilisateur {$infosAnnuaire['id']}";
116
							$this->mettreAJourUtilisateur($courriel, $mot_de_passe_sha1, $infosAnnuaire);
117
							$this->mettreAJourUtilisateur($courriel, $infosAnnuaire);
117
							// ci-dessous : ne pas caster en int car GWT attend une String (le con !)
118
							// ci-dessous : ne pas caster en int car GWT attend une String (le con !)
118
							$utilisateur_existant['licence'] = $this->recupererLicenceUtilisateur($infosAnnuaire['id']);
119
							$utilisateur_existant['licence'] = $this->recupererLicenceUtilisateur($infosAnnuaire['id']);
119
						} else {
120
						} else {
120
							// Nécessite d'ajouter le nouvel utilisateur
121
							// Nécessite d'ajouter le nouvel utilisateur
121
							$this->debug[] = "Ajout d'une nouvel utilisateur";
122
							$this->debug[] = "Ajout d'une nouvel utilisateur";
122
							$this->ajouterUtilisateurACoel($infosAnnuaire, $mot_de_passe_sha1);
123
							$this->ajouterUtilisateurACoel($infosAnnuaire);
123
							// rechargement après l'avoir ajouté (un peu nul)
124
							// rechargement après l'avoir ajouté (un peu nul)
124
							$utilisateur_existant = $this->chargerUtilisateur($courriel);
125
							$utilisateur_existant = $this->chargerUtilisateur($courriel);
Line 228... Line 229...
228
	}
229
	}
Line 229... Line 230...
229
 
230
 
230
	/**
231
	/**
231
	 * Met à jour les données de l'utilisateur dans la table CoeL Personnes
232
	 * Met à jour les données de l'utilisateur dans la table CoeL Personnes
232
	 */
233
	 */
233
	protected function mettreAJourUtilisateur($login, $mot_de_passe_sha1, $infos) {
234
	protected function mettreAJourUtilisateur($login, $infos) {
234
		try {
235
		try {
235
		   	$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom'];
236
		   	$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom'];
236
			$requete =  ''
237
			$requete =  ''
237
				. 'UPDATE coel_personne'
238
				. 'UPDATE coel_personne'
238
				. " SET cp_id_personne = '{$infos['id']}', "
239
				. " SET cp_id_personne = '{$infos['id']}', "
239
				. "	cp_fmt_nom_complet = '$cp_fmt_nom_complet', cp_prenom = '{$infos['prenom']}', cp_nom = '{$infos['nom']}', "
240
				. "	cp_fmt_nom_complet = '$cp_fmt_nom_complet', cp_prenom = '{$infos['prenom']}', cp_nom = '{$infos['nom']}', "
240
				. "	cp_code_postal = '{$infos['code_postal']}', cp_ville = '{$infos['ville']}', cp_truk_courriel = '{$infos['courriel']}', "
241
				. "	cp_code_postal = '{$infos['code_postal']}', cp_ville = '{$infos['ville']}', cp_truk_courriel = '{$infos['courriel']}', "
241
				. "	cp_login = '{$infos['courriel']}', cp_mot_de_passe = '$mot_de_passe_sha1', cp_ce_annuaire = '{$infos['id']}' "
242
				. "	cp_login = '{$infos['courriel']}', cp_ce_annuaire = '{$infos['id']}' "
242
				. " WHERE cp_login = '$login' "
-
 
243
				//. "	AND cp_mot_de_passe = '{$infos['mot_de_passe']}' " // WTF ?
243
				. " WHERE cp_login = '$login' "
Line 244... Line 244...
244
			;
244
			;
245
 
245
 
246
			// Ajout des données
246
			// Ajout des données
Line 284... Line 284...
284
	}
284
	}
Line 285... Line 285...
285
 
285
 
286
	/**
286
	/**
287
	 * Ajoute une copie de l'utilisateur dans la table CoeL Personnes
287
	 * Ajoute une copie de l'utilisateur dans la table CoeL Personnes
288
	 */
288
	 */
289
	protected function ajouterUtilisateurACoel($infos, $mot_de_passe_sha1) {
289
	protected function ajouterUtilisateurACoel($infos) {
290
		try {
290
		try {
291
			// Construction de la requête d'ajout
291
			// Construction de la requête d'ajout
292
		   	// Notes : pour rester compatibles avec l'annuaire de Tela, les utilisateurs sont ajoutés directement avec l'id
292
		   	// Notes : pour rester compatibles avec l'annuaire de Tela, les utilisateurs sont ajoutés directement avec l'id
-
 
293
		   	// de l'annuaire Tela. Dans CoelPersonne, les personnes qui ne sont pas utilisateur sont ajoutés avec un id supérieur à 100 000
-
 
294
		   	// Notes 2017 : on ne devrait plus stocker les mots de passe dans la table coel_personne, et on ne devrait plus
293
		   	// de l'annuaire Tela. Dans CoelPersonne, les personnes qui ne sont pas utilisateur sont ajoutés avec un id supérieur à 100 000
295
		   	// considérer que la base de données de l'annuaire se trouve sur le même serveur.
294
		   	$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom'];
296
		   	$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom'];
295
		   	$cp_mark_licence = '0';
297
		   	$cp_mark_licence = '0';
296
			// si un utilisateur a changé son email dans un compte TB existant, une ligne avec son ID existera déjà et /i
298
			// si un utilisateur a changé son email dans un compte TB existant, une ligne avec son ID existera déjà et /i
297
			// => on fait un REPLACE (attention à la compatibilité !)
299
			// => on fait un REPLACE (attention à la compatibilité !)
298
		   	$requete = 	'REPLACE INTO coel_personne '.
300
		   	$requete = 	'REPLACE INTO coel_personne '.
299
		   				'	(cp_id_personne, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_code_postal, '. 
301
		   				'	(cp_id_personne, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_code_postal, '. 
300
						'	cp_ville, cp_truk_courriel, cp_login, cp_mot_de_passe, cp_ce_annuaire, cp_mark_licence) '.
302
						'	cp_ville, cp_truk_courriel, cp_login, cp_ce_annuaire, cp_mark_licence) '.
301
		   				"VALUES ('{$infos['id']}', '$cp_fmt_nom_complet', '{$infos['prenom']}', '{$infos['nom']}', ". 
303
		   				"VALUES ('{$infos['id']}', '$cp_fmt_nom_complet', '{$infos['prenom']}', '{$infos['nom']}', ". 
302
		   				"'{$infos['code_postal']}', '{$infos['ville']}', '{$infos['courriel']}', '{$infos['courriel']}', '".$mot_de_passe_sha1."', ". 
304
		   				"'{$infos['code_postal']}', '{$infos['ville']}', '{$infos['courriel']}', '{$infos['courriel']}', ". 
303
		   				"'{$infos['id']}', $cp_mark_licence) ";
305
		   				"'{$infos['id']}', $cp_mark_licence) ";
304
		   	//$this->debug[] = $requete;
306
		   	//$this->debug[] = $requete;
-
 
307
			// Ajout des données
305
			// Ajout des données
308
			var_dump($requete);
306
			$resultat = $this->bdd->exec($requete);
309
			$resultat = $this->bdd->exec($requete);
307
			if ($resultat === false) {
310
			if ($resultat === false) {
308
				$this->debug[] = "Utilisateur NON ajouté dans coel_personne car la requête a échouée.";
311
				$this->debug[] = "Utilisateur NON ajouté dans coel_personne car la requête a échouée.";
309
			} else {
312
			} else {
Line 315... Line 318...
315
		}
318
		}
316
	}
319
	}
Line 317... Line 320...
317
 
320
 
318
	/**
321
	/**
-
 
322
	 * Appelle l'annuaire pour connaître tous les détails de l'utilisateur de courriel $login
319
	 * Appelle l'annuaire pour connaître tous les détails de l'utilisateur de courriel $login
323
	 * @TODO gérer le pseudo un jour !
320
	 */
324
	 */
321
	protected function obtenirInfosAnnuaire($login)	{
325
	protected function obtenirInfosAnnuaire($login)	{
322
		$url_annuaire = $this->config['coel']['urlAnnuaire'];
326
		$url_annuaire = $this->config['coel']['urlAnnuaire'];
323
		$login_annuaire = $this->config['coel']['loginAnnuaire'];
327
		$login_annuaire = $this->config['coel']['loginAnnuaire'];
Line 330... Line 334...
330
		$url_annuaire = $protocole . $login_annuaire . ':' . $mdp_annuaire . "@" . $reste_adresse;
334
		$url_annuaire = $protocole . $login_annuaire . ':' . $mdp_annuaire . "@" . $reste_adresse;
331
		$url_annuaire .= '/' . $login;
335
		$url_annuaire .= '/' . $login;
332
		$url_annuaire .= '/xml'; // @TODO un jour, faire en sorte que ça lise du JSON
336
		$url_annuaire .= '/xml'; // @TODO un jour, faire en sorte que ça lise du JSON
Line 333... Line 337...
333
 
337
 
-
 
338
		$resultat_annuaire = file_get_contents($url_annuaire);
334
		$resultat_annuaire = file_get_contents($url_annuaire);
339
		// valeurs par défaut pour éviter des warning
-
 
340
		$tableau_annuaire = array(
-
 
341
			"nom" => "",
-
 
342
			"prenom" => "",
-
 
343
			"ville" => "",
-
 
344
			"code_postal" => "",
-
 
345
			"courriel" => ""
335
		$tableau_annuaire = null;
346
		);
336
		if ($xml_utilisateur = simplexml_load_string($resultat_annuaire))	{
347
		if ($xml_utilisateur = simplexml_load_string($resultat_annuaire))	{
337
			// La fonction a retourné un objet
348
			// La fonction a retourné un objet
338
			foreach ($xml_utilisateur->children() as $key => $val) {
349
			foreach ($xml_utilisateur->children() as $key => $val) {
339
				if ((string) $val != '') {
350
				if ((string) $val != '') {
Line 388... Line 399...
388
	 *
399
	 *
389
	 * @param String $jeton un jeton JWT
400
	 * @param String $jeton un jeton JWT
390
	 * @return true si le jeton est vérifié, false sinon
401
	 * @return true si le jeton est vérifié, false sinon
391
	 */
402
	 */
392
	protected function verifierJeton($jeton) {
403
	protected function verifierJeton($jeton) {
393
		$urlServiceVerification =$this->config['coel']['urlServiceBaseAuth'] . "verifierjeton";
404
		$urlServiceVerification = $this->config['coel']['urlServiceBaseAuth'] . "verifierjeton";
394
		$urlServiceVerification .= "?token=" . $jeton;
405
		$urlServiceVerification .= "?token=" . $jeton;
395
	
406
 
396
		// file_get_contents râle si le certificat HTTPS est auto-signé
407
		// file_get_contents râle si le certificat HTTPS est auto-signé
397
		//$retour = file_get_contents($urlServiceVerification);
408
		//$retour = file_get_contents($urlServiceVerification);
Line 398... Line 409...
398
	
409
	
399
		// curl avec les options suivantes ignore le pb de certificat (pour tester en local)
410
		// curl avec les options suivantes ignore le pb de certificat (pour tester en local)