Subversion Repositories Applications.annuaire

Compare Revisions

Ignore whitespace Rev 578 → Rev 579

/trunk/jrest/services/Auth.php
187,11 → 187,33
protected function connexion($ressources) {
$login = $this->getParam('login');
$password = $this->getParam('password', null);
$partenaire = $this->getParam('partner');
if ($login == '' || $password == '') {
$this->erreur("parameters <login> and <password> required");
}
// vérification login / password
$acces = $this->verifierAcces($login, $password);
$acces = false;
$objAuth = null;
// connexion à un partenaire ?
if ($partenaire != '') {
$classeAuth = "AuthPartner" . ucfirst(strtolower($partenaire));
try {
$fichierClasse = "auth/$classeAuth.php";
/*if (! file_exists($fichierClasse)) {
$this->erreur('unknown partner "' . $partenaire . '"');
}*/
require $fichierClasse;
$objAuth = new $classeAuth($this);
// authentification par le partenaire
$acces = $objAuth->verifierAcces($login, $password);
} catch(Exception $e) {
$this->erreur($e->getMessage(), 500);
}
} else {
// authentification locale
$acces = $this->verifierAcces($login, $password);
// faux polylmorphisme pour éviter des "if" partout
$objAuth = new Utilisateur($this->config);
}
if ($acces === false) {
$this->detruireCookie();
// redirection si demandée - se charge de sortir du script en cas de succès
200,8 → 222,7
$this->erreur("authentication failed", 401);
}
// infos utilisateur
$util = new Utilisateur($this->config);
$infos = $util->getIdentiteParCourriel($login);
$infos = $objAuth->getIdentiteParCourriel($login);
// getIdentiteParCourriel retourne toujours le courriel comme clef de tableau en lowercase
$login = strtolower($login);
if (count($infos) == 0 || empty($infos[$login])) {
211,9 → 232,9
$this->erreur("could not get user info");
}
// nom Wiki
$infos[$login]['nomWiki'] = $util->formaterNomWiki($infos[$login], "UnknownWikiName");
// date de dernière modification du profi
$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
$infos[$login]['nomWiki'] = $objAuth->formaterNomWiki($infos[$login], "UnknownWikiName");
// date de dernière modification du profil
$dateDerniereModif = $objAuth->getDateDerniereModifProfil($infos[$login]['id'], true);
$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
// création du jeton
$jwt = $this->creerJeton($login, $infos[$login]);
393,7 → 414,7
// décodage d'un jeton expiré
// @WARNING considère que la lib JWT jette ExpiredException en dernier (vrai 12/05/2015),
// ce qui signifie que la signature et le domaine sont tout de même valides - à surveiller !
$infos = $this->decoderJetonExpireManuellement($jwt);
$infos = $this->decoderJetonManuellement($jwt);
} else {
// on renvoie l'exception plus haut
throw $e;
415,10 → 436,10
* Décode manuellement un jeton JWT, SANS VÉRIFIER SA SIGNATURE OU
* SON DOMAINE ! @WARNING ne pas utiliser hors du cas d'un jeton
* correct (vérifié avec la lib JWT) mais expiré !
*
* Public car utilisé par les classes AuthPartner (@TODO stratégie à valider)
* @param string $jwt un jeton vérifié comme valide, mais expiré
*/
protected function decoderJetonExpireManuellement($jwt) {
public function decoderJetonManuellement($jwt) {
$parts = explode('.', $jwt);
$payload = $parts[1];
$payload = base64_decode($payload);
/trunk/jrest/services/auth/AuthPartner.php
New file
0,0 → 1,19
<?php
 
abstract class AuthPartner {
 
/** Injection de dépendance du service Auth, pour utiliser les méthodes comme decoderJetonManuellement() */
protected $lib;
 
/** Données retournées par le service d'authentification du partenaire */
protected $data;
 
public function __construct($authLib) {
$this->lib = $authLib;
}
 
public abstract function verifierAcces($login, $password);
public abstract function getIdentiteParCourriel();
public abstract function formaterNomWiki();
public abstract function getDateDerniereModifProfil();
}
/trunk/jrest/services/auth/AuthPartnerPlantnet.php
New file
0,0 → 1,50
<?php
 
require "AuthPartner.php";
 
/**
* Permet de se connecter à l'annuaire de Tela Botanica à l'aide d'un compte Pl@ntNet / identify
*/
class AuthPartnerPlantnet extends AuthPartner {
 
public function verifierAcces($login, $password) {
$url = "http://identify-test.plantnet-project.org/api/security/token/create?_username=$login&_password=$password";
 
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($curl);
curl_close($curl);
 
$res = json_decode($res, true);
//var_dump($res);
if (!empty($res['JWT'])) {
$jeton = $this->lib->decoderJetonManuellement($res['JWT']);
// stockage pour traitement dans les autres méthodes
$this->data = $jeton;
//var_dump($jeton);
if (!empty($jeton['details']['email'])) {
//var_dump($jeton['details']['email']);
return true;
}
}
 
return false;
}
 
public function getIdentiteParCourriel() {
 
echo "get identité par courriel<br/>";
}
 
public function formaterNomWiki() {
 
echo "formater nom wiki<br/>";
}
 
public function getDateDerniereModifProfil() {
 
echo "get date dernière modif profil<br/>";
}
}