Subversion Repositories Applications.annuaire

Rev

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

Rev 587 Rev 599
Line 1... Line 1...
1
<?php
1
<?php
Line 2... Line 2...
2
 
2
 
Line 3... Line 3...
3
require "AuthPartner.php";
3
require "AuthPartner.php";
4
 
4
 
-
 
5
/**
-
 
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)
-
 
8
 * 
-
 
9
 * // POST https://cas.recolnat.org/v1/tickets -H 'Content-Type: application/x-www-form-urlencoded' --data 'username=mchouet&password=mat87cho'
5
/**
10
 * // => 400 ou 201
6
 * Permet de se connecter à l'annuaire de Tela Botanica à l'aide d'un compte Pl@ntNet / identify
11
 * => GET https://api.recolnat.org/erecolnat/v1/users/login/mchouet
Line 7... Line 12...
7
 */
12
 */
8
class AuthPartnerPlantnet extends	AuthPartner {
13
class AuthPartnerRecolnat extends AuthPartner {
9
 
14
 
10
	public function verifierAcces($login, $password) {
15
	public function verifierAcces($login, $password) {
Line 11... Line 16...
11
		$login = urlencode($login); // pour les espaces dans le nom d'utilisateur
16
		$login = urlencode($login); // pour les espaces dans le nom d'utilisateur
12
		$password = urlencode($password);
17
		$password = urlencode($password);
13
		$url = "http://identify.plantnet-project.org/api/security/token/create?_username=$login&_password=$password";
18
		$url = "https://cas.recolnat.org/v1/tickets";
14
 
19
 
15
		$curl = curl_init();
20
		$curl = curl_init();
-
 
21
		curl_setopt($curl, CURLOPT_URL, $url);
16
		curl_setopt($curl, CURLOPT_URL, $url);
22
		curl_setopt($curl, CURLOPT_POST, true);
-
 
23
		curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
17
		curl_setopt($curl, CURLOPT_POST, true);
24
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
Line 18... Line 25...
18
		curl_setopt($curl, CURLOPT_POSTFIELDS, array()); // nécessaire dans les versions modernes de libcurl sinon on se prend un 400 !
25
		curl_setopt($curl, CURLOPT_POSTFIELDS, "username=$login&password=$password");
-
 
26
		$res = curl_exec($curl);
-
 
27
		$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
-
 
28
		curl_close($curl);
-
 
29
 
-
 
30
		//var_dump($httpCode); exit;
-
 
31
		if ($httpCode == 201) { // un ticket a été créé, l'utilisateur existe
-
 
32
			// récupération des infos utilisateur
-
 
33
			// (attention, répond même si l'authentification a échoué !)
-
 
34
			$url = "https://api.recolnat.org/erecolnat/v1/users/login/$login";
-
 
35
			$curl = curl_init();
19
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
36
			curl_setopt($curl, CURLOPT_URL, $url);
20
		$res = curl_exec($curl);
37
			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
21
		curl_close($curl);
38
			$res = curl_exec($curl);
22
 
39
			curl_close($curl);
23
		// var_dump($res); exit;
-
 
24
		$res = json_decode($res, true);
40
 
25
		//var_dump($res);
41
			$res = json_decode($res, true);
26
		if (!empty($res['JWT'])) {
42
			//var_dump($res); exit;
27
			$this->jetonPartenaire = $res['JWT'];
43
			if ($res != null) {
28
			$jetonDecode = $this->auth->decoderJetonManuellement($this->jetonPartenaire);
44
				$this->jetonPartenaire = $res; // pas vraiment un jeton...
29
			// stockage pour traitement dans les autres méthodes
45
				// stockage pour traitement dans les autres méthodes
-
 
46
				$this->data = $res;
30
			$this->data = $jetonDecode['details'];
47
				//var_dump($this->data); exit;
31
			//var_dump($jeton);
48
				if ( !empty($this->data['email'])) {
32
			if ( !empty($this->data['email'])) {
49
					//var_dump($this->data['email']);
33
				//var_dump($this->data['email']);
50
					return true;
Line 34... Line 51...
34
				return true;
51
				}
35
			}
52
			}
36
		}
53
		}
Line 37... Line 54...
37
		return false;
54
		return false;
38
	}
55
	}
39
 
56
 
Line 40... Line 57...
40
	protected function getNomPartenaire() {
57
	protected function getNomPartenaire() {
41
		return "plantnet";
58
		return "recolnat";
-
 
59
	}
42
	}
60
 
43
 
61
	public function getCourriel() {
Line 44... Line 62...
44
	public function getCourriel() {
62
		return $this->data['email'];
45
		return $this->data['email'];
63
	}
-
 
64
 
46
	}
65
	protected function getId() {
47
 
66
		// le "login" est le "username" dans eRecolnat, mais il y a aussi
48
	protected function getId() {
67
		// un "user_id" et un "user_uuid"... @TODO valider cette stratégie
49
		// la clef primaire est le "username" dans Pl@ntNet, apparemment
68
		return $this->data['login'];
50
		return $this->data['username'];
69
	}
51
	}
70
 
Line 52... Line 71...
52
 
71
	protected function getValeursProfilPartenaire() {
53
	protected function getValeursProfilPartenaire() {
72
		return array(