Subversion Repositories Applications.annuaire

Rev

Rev 599 | Rev 601 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

require "AuthPartner.php";

/**
 * Permet de se connecter à l'annuaire de Tela Botanica à l'aide d'un compte eRecolnat
 * à travers le CAS de Brice (https://cas.recolnat.org)
 * 
 * // POST https://cas.recolnat.org/v1/tickets -H 'Content-Type: application/x-www-form-urlencoded' --data 'username=mchouet&password=mat87cho'
 * // => 400 ou 201
 * => GET https://api.recolnat.org/erecolnat/v1/users/login/mchouet
 */
class AuthPartnerRecolnat extends AuthPartner {

        public function verifierAcces($login, $password) {
                $login = urlencode($login); // pour les espaces dans le nom d'utilisateur
                $password = urlencode($password);
                $url = "https://cas.recolnat.org/v1/tickets";

                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_POST, true);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($curl, CURLOPT_POSTFIELDS, "username=$login&password=$password");
                $res = curl_exec($curl);
                $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
                curl_close($curl);

                //var_dump($httpCode); exit;
                if ($httpCode == 201) { // un ticket a été créé, l'utilisateur existe
                        // récupération des infos utilisateur
                        // (attention, répond même si l'authentification a échoué !)
                        $url = "https://api.recolnat.org/erecolnat/v1/users/login/$login";
                        $curl = curl_init();
                        curl_setopt($curl, CURLOPT_URL, $url);
                        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
                        $res = curl_exec($curl);
                        curl_close($curl);

                        $res = json_decode($res, true);
                        //var_dump($res); exit;
                        if ($res != null) {
                                $this->jetonPartenaire = $res; // pas vraiment un jeton...
                                // stockage pour traitement dans les autres méthodes
                                $this->data = $res;
                                //var_dump($this->data); exit;
                                if ( !empty($this->data['email'])) {
                                        //var_dump($this->data['email']);
                                        return true;
                                }
                        }
                }
                return false;
        }

        protected function getNomPartenaire() {
                return "recolnat";
        }

        public function getCourriel() {
                return $this->data['email'];
        }

        protected function getId() {
                // le "login" est le "username" dans eRecolnat, mais il y a aussi
                // un "user_id" et un "user_uuid"... @TODO valider cette stratégie
                return $this->data['login'];
        }

        protected function getValeursProfilPartenaire() {
                return array(
                        // @WARNING "firstname" et "lastname" semblent inversés
                        'nom' => $this->data['firstname'],
                        'prenom' => $this->data['lastname'],
                        'email' => $this->data['email'],
                        'pseudo' => $this->data['login'] // @TODO valider cette stratégie
                );
        }

        /*public function getTimestampMajPartenaire() {
                return 420000000000;
        }*/
}