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, '-_', '+/'));
}
}