Subversion Repositories Applications.annuaire

Rev

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

Rev 603 Rev 604
1
<?php
1
<?php
2
 
2
 
3
require "AuthPartner.php";
3
require "AuthPartner.php";
4
 
4
 
5
/**
5
/**
6
 * Permet de se connecter à l'annuaire de Tela Botanica à l'aide d'un compte eRecolnat
6
 * Permet de se connecter à l'annuaire de Tela Botanica à l'aide d'un compte eRecolnat
7
 * à travers le CAS de Brice (https://cas.recolnat.org)
7
 * à travers le CAS de Brice (https://cas.recolnat.org)
8
 * 
8
 * 
9
 * // POST https://cas.recolnat.org/v1/tickets -H 'Content-Type: application/x-www-form-urlencoded' --data 'username=monNom&password=monMdp'
9
 * // POST https://cas.recolnat.org/v1/tickets -H 'Content-Type: application/x-www-form-urlencoded' --data 'username=monNom&password=monMdp'
10
 * // => 400 ou 201
10
 * // => 400 ou 201
11
 * => GET https://api.recolnat.org/erecolnat/v1/users/login/monNom
11
 * => GET https://api.recolnat.org/erecolnat/v1/users/login/monNom
12
 */
12
 */
13
class AuthPartnerRecolnat extends AuthPartner {
13
class AuthPartnerRecolnat extends AuthPartner {
14
 
14
 
15
	public function verifierAcces($login, $password) {
15
	public function verifierAcces($login, $password) {
16
		$login = urlencode($login); // pour les espaces dans le nom d'utilisateur
16
		$login = urlencode($login); // pour les espaces dans le nom d'utilisateur
17
		$password = urlencode($password);
17
		$password = urlencode($password);
18
		$url = "https://cas.recolnat.org/v1/tickets";
18
		$url = "https://cas.recolnat.org/v1/tickets";
19
 
19
 
20
		$curl = curl_init();
20
		$curl = curl_init();
21
		curl_setopt($curl, CURLOPT_URL, $url);
21
		curl_setopt($curl, CURLOPT_URL, $url);
22
		curl_setopt($curl, CURLOPT_POST, true);
22
		curl_setopt($curl, CURLOPT_POST, true);
23
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
23
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
24
		curl_setopt($curl, CURLOPT_POSTFIELDS, "username=$login&password=$password");
24
		curl_setopt($curl, CURLOPT_POSTFIELDS, "username=$login&password=$password");
-
 
25
		if ($this->config['auth']['curl_soft_ssl']) {
-
 
26
			curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
-
 
27
		}
25
		$res = curl_exec($curl);
28
		$res = curl_exec($curl);
26
		$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
29
		$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
27
		curl_close($curl);
30
		curl_close($curl);
28
 
31
 
29
		//var_dump($httpCode); exit;
32
		//var_dump($httpCode); exit;
30
		if ($httpCode == 201) { // un ticket a été créé, l'utilisateur existe
33
		if ($httpCode == 201) { // un ticket a été créé, l'utilisateur existe
31
			// récupération des infos utilisateur
34
			// récupération des infos utilisateur
32
			// (attention, répond même si l'authentification a échoué !)
35
			// (attention, répond même si l'authentification a échoué !)
33
			$url = "https://api.recolnat.org/erecolnat/v1/users/login/$login";
36
			$url = "https://api.recolnat.org/erecolnat/v1/users/login/$login";
34
			$curl = curl_init();
37
			$curl = curl_init();
35
			curl_setopt($curl, CURLOPT_URL, $url);
38
			curl_setopt($curl, CURLOPT_URL, $url);
36
			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
39
			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
-
 
40
			if ($this->config['auth']['curl_soft_ssl']) {
-
 
41
				curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
-
 
42
			}
37
			$res = curl_exec($curl);
43
			$res = curl_exec($curl);
38
			curl_close($curl);
44
			curl_close($curl);
39
 
45
 
40
			$res = json_decode($res, true);
46
			$res = json_decode($res, true);
41
			//var_dump($res); exit;
47
			//var_dump($res); exit;
42
			if ($res != null) {
48
			if ($res != null) {
-
 
49
				unset($res['avatar']['data']); // trop gros, rentre pas dans le header du jeton et pète le service
43
				$this->jetonPartenaire = $res; // pas vraiment un jeton...
50
				$this->jetonPartenaire = $res; // pas vraiment un jeton...
44
				// stockage pour traitement dans les autres méthodes
51
				// stockage pour traitement dans les autres méthodes
45
				$this->data = $res;
52
				$this->data = $res;
46
				//var_dump($this->data); exit;
53
				//var_dump($this->data); exit;
47
				if ( !empty($this->data['email'])) {
54
				if ( !empty($this->data['email'])) {
48
					//var_dump($this->data['email']);
55
					//var_dump($this->data['email']);
49
					return true;
56
					return true;
50
				}
57
				}
51
			}
58
			}
52
		}
59
		}
53
		return false;
60
		return false;
54
	}
61
	}
55
 
62
 
56
	protected function getNomPartenaire() {
63
	protected function getNomPartenaire() {
57
		return "recolnat";
64
		return "recolnat";
58
	}
65
	}
59
 
66
 
60
	public function getCourriel() {
67
	public function getCourriel() {
61
		return $this->data['email'];
68
		return $this->data['email'];
62
	}
69
	}
63
 
70
 
64
	protected function getId() {
71
	protected function getId() {
65
		// le "login" est le "username" dans eRecolnat, mais il y a aussi
72
		// le "login" est le "username" dans eRecolnat, mais il y a aussi
66
		// un "user_id" et un "user_uuid"... @TODO valider cette stratégie
73
		// un "user_id" et un "user_uuid"... @TODO valider cette stratégie
67
		return $this->data['login'];
74
		return $this->data['login'];
68
	}
75
	}
69
 
76
 
70
	protected function getValeursProfilPartenaire() {
77
	protected function getValeursProfilPartenaire() {
71
		return array(
78
		return array(
72
			// @WARNING "firstname" et "lastname" semblent inversés
79
			// @WARNING "firstname" et "lastname" semblent inversés
73
			'nom' => $this->data['firstname'],
80
			'nom' => $this->data['firstname'],
74
			'prenom' => $this->data['lastname'],
81
			'prenom' => $this->data['lastname'],
75
			'email' => $this->data['email'],
82
			'email' => $this->data['email'],
76
			'pseudo' => $this->data['login'] // @TODO valider cette stratégie
83
			'pseudo' => $this->data['login'] // @TODO valider cette stratégie
77
		);
84
		);
78
	}
85
	}
79
 
86
 
80
	/*public function getTimestampMajPartenaire() {
87
	/*public function getTimestampMajPartenaire() {
81
		return 420000000000;
88
		return 420000000000;
82
	}*/
89
	}*/
83
}
90
}