Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1054 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

/**
 * Donne l'utilisateur en cours s'il est connecté, en lisant le cookie SSO
 * 
 * Pour l'instant, utilisé uniquement dans popup_contact
 */
class Utilisateur {

        protected $nomCookieSSO = '';
        //protected $urlServiceAnnuaire = '';
        protected $urlConnexionSite = '';
        protected $identifie = false;
        protected $courriel = null;

        public function __construct(Conteneur $conteneur) {
                $this->nomCookieSSO = $conteneur->getParametre('auth.nomCookieSSO');
                //$this->urlServiceAnnuaire = $conteneur->getParametre('baseUrlServicesAnnuaireTpl');
                $this->urlConnexionSite = $conteneur->getParametre('auth.baseUrlConnexionSite');
                $this->lireCookieSSO();
        }

        /**
         * Retourne l'adresse email de l'utilisateur actuellement identifié
         */
        public function getCourriel() {
                return $this->courriel;
        }

        /**
         * Retourne true si l'utilisateur est en possession d'un cookie qui
         * l'identifie
         */
        public function estIdentifie() {
                return $this->identifie;
        }

        /**
         * Retourne l'URL de connexion au SSO
         */
        public function getUrlConnexion() {
                return $this->urlConnexionSite;
        }

        protected function lireCookieSSO() {
                if (isset($_COOKIE[$this->nomCookieSSO])) {
                        $jeton = $_COOKIE[$this->nomCookieSSO];
                        // On ne valide pas le jeton car il vient directement du cookie
                        // (supposé être sur HTTPS uniquement)
                        $jetonDecode = $this->decoderJeton($jeton);
                        //var_dump($jetonDecode); echo "<br><br>";
                        if ($jetonDecode && ! empty($jetonDecode['sub'])) {
                                $this->courriel = $jetonDecode['sub'];
                                $this->identifie = true;
                        }
                }
        }

        /**
         * Décode un jeton SSO et retourne son contenu
         */
    protected function decoderJeton($jeton) {
        $parts = explode('.', $jeton);
        $payload = $parts[1];
        $payload = $this->urlsafeB64Decode($payload);
        $payload = json_decode($payload, true);

        return $payload;
    }

    /**
     * Décode le base64 de manière "urlsafe" (copié de la lib JWT)
     */
    protected function urlsafeB64Decode($input) {
        $remainder = strlen($input) % 4;
        if ($remainder) {
            $padlen = 4 - $remainder;
            $input .= str_repeat('=', $padlen);
        }
        return base64_decode(strtr($input, '-_', '+/'));
    }

}