Subversion Repositories Applications.annuaire

Compare Revisions

Ignore whitespace Rev 579 → Rev 580

/trunk/jrest/services/auth/AuthPartner.php
3,17 → 3,117
abstract class AuthPartner {
 
/** Injection de dépendance du service Auth, pour utiliser les méthodes comme decoderJetonManuellement() */
protected $lib;
protected $auth;
 
/** Données retournées par le service d'authentification du partenaire */
/** Injection de dépendance de la lib Utilisateur depuis le service Auth */
protected $utilisateur;
 
/** Jeton brut retourné par le service d'authentification du partenaire */
protected $jetonPartenaire;
 
/** Données décodées depuis le jeton du partenaire */
protected $data;
 
/** Identifiant de l'utilisateur dans l'annuaire local, ou false s'il n'existe pas */
protected $idLocal;
 
public function __construct($authLib) {
$this->lib = $authLib;
$this->auth = $authLib;
$this->utilisateur = $authLib->getUtilisateur();
$this->idLocal = false;
}
 
/** Retourne true si l'utilisateur est authentifié par le partenaire */
public abstract function verifierAcces($login, $password);
public abstract function getIdentiteParCourriel();
public abstract function formaterNomWiki();
public abstract function getDateDerniereModifProfil();
 
/**
* Vérifie si l'annuaire contient déjà une entrée associée au
* courriel de l'utilisateur et l'ajoute ou la met à jour au besoin
*/
public function synchroniser() {
$courriel = $this->getCourriel();
// l'utilisateur existe-t-il déjà ?
$this->idLocal = $this->utilisateur->getIdParCourriel($courriel);
if ($this->idLocal !== false) {
if (! $this->profilEstAJour()) {
$this->mettreAJourProfil();
}
} else {
$this->inscrireUtilisateur();
}
}
 
/**
* Retourne true si le profil local est à jour par rapport à la date
* de dernière modification fournie par le partenaire; si une telle
* date n'existe pas, retourne $retourSiPasDeDate (true par défaut - on
* ne met pas à jour)
*/
protected function profilEstAJour($retourSiPasDeDate=true) {
$tsMajPartenaire = $this->getTimestampMajPartenaire();
//echo "Timestamp partenaire : "; var_dump($tsMajPartenaire); echo "<br/>";
if ($tsMajPartenaire != null) {
$dateMajLocale = $this->utilisateur->getDateDerniereModifProfil($this->idLocal);
$tsMajLocale = strtotime($dateMajLocale); // attention à ne pas changer le format de date !
//echo "Timestamp local : "; var_dump($tsMajLocale); echo "<br/>";
return ($tsMajLocale >= $tsMajPartenaire);
}
// Si le partenaire ne fournit pas de date, on retourne la valeur par défaut
return $retourSiPasDeDate;
}
 
/**
* Retourne le nom du partenaire en cours
*/
protected abstract function getNomPartenaire();
 
/**
* Retourne le courriel de l'utilisateur fourni par le partenaire
*/
protected abstract function getCourriel();
 
/**
* Retourne l'identifiant de l'utilisateur fourni par le partenaire
*/
protected abstract function getId();
 
/**
* Retourne le timestamp de dernière mise à jour du profil fournie par le
* partenaire; par défaut retourne null, ce qui laisse au mécanisme de
* synchronisation le soin de décider si on met à jour le profil ou non
*/
protected function getTimestampMajPartenaire() {
return null;
}
 
/**
* Retourne le jeton fourni par le partenaire
*/
public function getJetonPartenaire() {
return $this->jetonPartenaire;
}
 
/**
* Retourne un tableau de valeurs correpondant au profil de l'utilisateur,
* fourni par le partenaire, et contenant au minimum :
* - nom
* - prenom
* - pseudo
* - email
* Pour les autres champs possibles, voir AnnuaireModele::inscrireUtilisateurCommeUnGrosPorc()
*/
protected abstract function getValeursProfilPartenaire();
 
protected function inscrireUtilisateur() {
$valeursProfil = $this->getValeursProfilPartenaire();
$valeursProfil['partenaire'] = $this->getNomPartenaire();
$valeursProfil['id_partenaire'] = $this->getId();
// gruik gruik
$this->utilisateur->inscrireUtilisateurCommeUnGrosPorc($valeursProfil);
}
 
protected function mettreAJourProfil() {
throw new Exception("La mise à jour du profil n'est pas encore prise en charge");
$valeursProfil = $this->getValeursProfilPartenaire();
}
}
/trunk/jrest/services/auth/AuthPartnerPlantnet.php
5,7 → 5,7
/**
* Permet de se connecter à l'annuaire de Tela Botanica à l'aide d'un compte Pl@ntNet / identify
*/
class AuthPartnerPlantnet extends AuthPartner {
class AuthPartnerPlantnet extends AuthPartner {
 
public function verifierAcces($login, $password) {
$url = "http://identify-test.plantnet-project.org/api/security/token/create?_username=$login&_password=$password";
13,38 → 13,51
$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, array()); // nécessaire dans les versions modernes de libcurl sinon on se prend un 400 !
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($curl);
curl_close($curl);
 
//var_dump($res);
$res = json_decode($res, true);
//var_dump($res);
if (!empty($res['JWT'])) {
$jeton = $this->lib->decoderJetonManuellement($res['JWT']);
$this->jetonPartenaire = $res['JWT'];
$jetonDecode = $this->auth->decoderJetonManuellement($this->jetonPartenaire);
// stockage pour traitement dans les autres méthodes
$this->data = $jeton;
$this->data = $jetonDecode['details'];
//var_dump($jeton);
if (!empty($jeton['details']['email'])) {
//var_dump($jeton['details']['email']);
if ( !empty($this->data['email'])) {
//var_dump($this->data['email']);
return true;
}
}
 
return false;
}
 
public function getIdentiteParCourriel() {
protected function getNomPartenaire() {
return "plantnet";
}
 
echo "get identité par courriel<br/>";
protected function getCourriel() {
return $this->data['email'];
}
 
public function formaterNomWiki() {
protected function getId() {
// la clef primaire est le "username" dans Pl@ntNet, apparemment
return $this->data['username'];
}
 
echo "formater nom wiki<br/>";
protected function getValeursProfilPartenaire() {
return array(
'nom' => $this->data['lastname'],
'prenom' => $this->data['firstname'],
'email' => $this->data['email'],
'pseudo' => $this->data['username']
);
}
 
public function getDateDerniereModifProfil() {
 
echo "get date dernière modif profil<br/>";
}
/*public function getTimestampMajPartenaire() {
return 420000000000;
}*/
}