Subversion Repositories Applications.annuaire

Rev

Rev 603 | Details | Compare with Previous | Last modification | View Log | RSS feed

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