/trunk/configurations/config.defaut.ini |
---|
113,11 → 113,9 |
benchmark_chrono = false |
; +------------------------------------------------------------------------------------------------------+ |
; Cookies |
cookies.duree = "php:3600*24*365" |
cookies.utilisateur="pap-annuaire_tela-utilisateur" |
cookies.utilisateurPersistant="pap-annuaire_tela-memo" |
cookies.niveau="eflore.niveau" |
; Authentification |
auth.nomCookieSSO = "tb_auth" |
auth.baseUrlConnexionSite = "http://www.tela-botanica.org/wp-login.php" |
; +------------------------------------------------------------------------------------------------------+ |
; Paramètres spécifiques à l'application |
/trunk/modules/popup_contact/presentations/scripts/identification.js |
---|
1,96 → 1,7 |
$(document).ready(function() { |
$("#connexion").on('click', connecter); |
// redirection vers l'URL de login du site, qui ramènera ensuite à la page |
// d'origine |
var url = $("#url_connexion_site").data('url'); |
console.log('url: ' + url); |
document.location.href = url; |
}); |
function connecter() { |
var erreurMsg = ""; |
var urlWs = URL_WS_UTILISATEUR; |
var courriel = $("#courriel").val(); |
var mdp = $("#mdp").val(); |
var persistance = $('#persistance').is(':checked'); |
var donnees = {'methode':'connexion', 'courriel':courriel, 'mdp':mdp, 'persistance':persistance}; |
$.ajax({ |
type : "PUT", |
cache : false, |
url : urlWs, |
data : donnees, |
beforeSend : nettoyerMsg, |
success : function(data) { |
if (data.identifie) { |
rechargerPage(); |
} else { |
afficherErreur(data.message); |
} |
}, |
error : function(jqXHR, textStatus, errorThrown) { |
erreurMsg += "Erreur Ajax :\ntype : "+textStatus+' '+errorThrown+"\n"; |
erreurMsg += extraireInfosReponse(jqXHR); |
afficherErreur('Une erreur est survenue lors de la connexion.'); |
if (DEBUG) { |
console.log('Erreur : '+erreurMsg); |
} |
}, |
complete : function(jqXHR, textStatus) { |
var debugMsg = extraireEnteteDebug(jqXHR); |
if (DEBUG) { |
console.log('Débogage : '+debugMsg); |
} |
} |
}); |
return false; |
} |
function nettoyerMsg() { |
$(".msg").remove(); |
} |
function rechargerPage() { |
window.location.reload(); |
} |
function extraireInfosReponse(jqXHR) { |
var erreurMsg = ''; |
try { |
reponse = jQuery.parseJSON(jqXHR.responseText); |
if (reponse != null) { |
$.each(reponse, function (cle, valeur) { |
erreurMsg += valeur + "\n"; |
}); |
} |
} catch(e) { |
erreurMsg += "L'erreur n'était pas en JSON."; |
} |
return erreurMsg; |
} |
function extraireEnteteDebug(jqXHR) { |
var debugMsg = ''; |
if (jqXHR.getResponseHeader("X-DebugJrest-Data") != '') { |
debugInfos = jQuery.parseJSON(jqXHR.getResponseHeader("X-DebugJrest-Data")); |
if (debugInfos != null) { |
$.each(debugInfos, function (cle, valeur) { |
debugMsg += valeur + "\n"; |
}); |
} |
} |
return debugMsg; |
} |
function afficherErreur(msg) { |
afficherTxt(msg, 'attention'); |
} |
function afficherInfo(msg) { |
afficherTxt(msg, 'information'); |
} |
function afficherMsg(msg) { |
afficherTxt(msg); |
} |
function afficherTxt(msg, type) { |
type = type ? ' '+type : ''; |
nettoyerMsg(); |
$("#zone-dialogue").append('<pre class="msg'+type+'">'+msg+'</pre>'); |
} |
/trunk/modules/popup_contact/presentations/scripts/contact.js |
---|
47,7 → 47,11 |
nettoyerMsg(); |
}, |
success : function(data) { |
if (data.message) { |
afficherInfo(data.message); |
} else { |
afficherInfo(data); |
} |
}, |
error : function(jqXHR, textStatus, errorThrown) { |
erreurMsg += "Erreur Ajax :\ntype : "+textStatus+' '+errorThrown+"\n"; |
70,9 → 74,9 |
} |
if (erreurMsg != '') { |
afficherMsg('Une erreur est survenue lors de la transmission de votre message.'+'<br />'+ |
'Vous pouvez signaler le disfonctionnement à <a href="'+ |
'Vous pouvez signaler le dysfonctionnement à <a href="'+ |
'mailto:cel@tela-botanica.org'+'?'+ |
'subject=Disfonctionnement du formulaire de contact'+ |
'subject=Dysfonctionnement du formulaire de contact'+ |
"&body="+erreurMsg+"\nDébogage :\n"+debugMsg+ |
'">eflore_remarques@tela-botanica.org</a>.'); |
} |
/trunk/modules/popup_contact/squelettes/form_identification.tpl.html |
---|
2,21 → 2,9 |
<div id="zone-dialogue"> |
<p class="msg attention"> |
Vous n'êtes pas identifié sur le site de Tela Botanica.<br /> |
Veuillez vous identifier afin d'accéder au formulaire de contact. |
Veuillez cliquer sur le lien ci-dessous pour vous identifier afin d'accéder au formulaire de contact. |
</p> |
</div> |
<form id="form-connexion" action="<?= $urlPopUp ?>" method="post"> |
<h3>Identifiez vous</h3> |
<label for="courriel">Courriel : </label> |
<input type="text" id="courriel" name="courriel" maxlength="80" value="" /> |
<label for="mdp">Mot de passe : </label> |
<input type="password" id="mdp" name="mdp" maxlength="80" value="" /> |
<p> |
<input type="submit" id="connexion" class="gauche btn" name="connexion" value="Connexion" /> |
<input id="persistance" class="gauche" name="persistance" type="checkbox" value="o" /> |
<label for="persistance">Rester connecté</label> |
</p> |
</form> |
<div id="url_connexion_site" data-url="<?php echo $urlPopUp; ?>"></div> |
</div> |
/trunk/modules/popup_contact/PopupContact.php |
---|
22,6 → 22,7 |
private $id_image = ''; |
private $urlWsCelTpl = ''; |
private $urlWsAnnuaireUtilisateurTpl = ''; |
protected $urlConnexionSite = ''; |
public function initialiser() { |
$this->capturerParametres(); |
31,6 → 32,7 |
$this->appUrls = $this->conteneur->getAppUrls(); |
$this->urlWsAnnuaireUtilisateurTpl = $this->conteneur->getParametre('baseUrlServicesAnnuaireTpl'); |
$this->urlWsCelTpl = $this->conteneur->getParametre('baseUrlServicesCelTpl'); |
$this->urlConnexionSite = $this->conteneur->getParametre('auth.baseUrlConnexionSite'); |
} |
private function capturerParametres() { |
47,7 → 49,7 |
} |
public function executerForm() { |
if ($this->utilisateur->etreIdentifie()) { |
if ($this->utilisateur->estIdentifie()) { |
$this->afficherFormContact(); |
} else { |
$this->afficherFormIdentification(); |
66,7 → 68,7 |
$infos = array(); |
// cas d'une obs saisie par une personne non inscrite |
// le message doit être envoyé au cel qui fournira le courriel de l'auteur |
if(trim($this->id_destinataire) == "") { |
if(trim($this->id_destinataire) == "" || trim($this->id_destinataire) == "null") { |
$infos['idDestinataire'] = $this->id_image; |
$infos['typeEnvoi'] = 'non-inscrit'; |
} else { |
100,9 → 102,18 |
$entete['urlWsUtilisateur'] = sprintf($this->urlWsAnnuaireUtilisateurTpl, 'utilisateur'); |
$this->setSortie(self::ENTETE, $this->getVue('contact_entete', $entete)); |
$infos = array(); |
$infos['urlPopUp'] = $this->appUrls->obtenirUrlPopUpContact($this->id_destinataire, $this->id_image); |
$currentUrl = ((@$_SERVER["HTTPS"] == "on") ? "https://" : "http://") |
. $_SERVER["SERVER_NAME"] |
. $_SERVER['REQUEST_URI']; |
var_dump($currentUrl); echo "<br/>"; |
var_dump(urlencode($currentUrl)); echo "<br/>"; |
$infos['urlPopUp'] = $this->urlConnexionSite . '?redirect_to=' . urlencode($currentUrl); |
$this->setSortie(self::RENDU_CORPS, $this->getVue('form_identification', $infos)); |
$this->setSortie(self::RENDU_CORPS, $this->getVue('form_identification', $infos)); |
} |
} |
?> |
/trunk/bibliotheque/Utilisateur.php |
---|
1,92 → 1,83 |
<?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 { |
const NIVEAU_DEBUTANT = 1; |
const NIVEAU_INTERMEDIAIRE = 2; |
const NIVEAU_EXPERT = 3; |
protected $nomCookieSSO = ''; |
//protected $urlServiceAnnuaire = ''; |
protected $urlConnexionSite = ''; |
protected $identifie = false; |
protected $courriel = null; |
private $dureeSauvegarde = null; |
private $nomCookieUtilisateur = ''; |
private $nomCookieUtilisateurPersistant = ''; |
private $nomCookieNiveau = ''; |
private $niveauDefaut = ''; |
private $urlWsAnnuaire = ''; |
private $restClient = null; |
private $niveau = null; |
private $identifie = false; |
private $courriel = null; |
private $md5Mdp = null; |
public function __construct(Conteneur $conteneur) { |
$this->dureeSauvegarde = $conteneur->getParametre('cookies.duree'); |
$this->nomCookieUtilisateur = $conteneur->getParametre('cookies.utilisateur'); |
$this->nomCookieUtilisateurPersistant = $conteneur->getParametre('cookies.utilisateurPersistant'); |
$this->nomCookieNiveau = $conteneur->getParametre('cookies.niveau'); |
$this->niveauDefaut = $conteneur->getParametre('utilisateur.niveau.defaut'); |
$this->urlWsAnnuaire = $conteneur->getParametre('baseUrlServicesAnnuaireTpl'); |
$this->restClient = $conteneur->getRestClient(); |
$this->analyserCookies(); |
$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; |
} |
public function getNiveau() { |
return $this->niveau; |
} |
public function sauver() { |
setcookie($this->nomCookieNiveau, time()+$this->dureeSauvegarde, '/'); |
} |
public function etreIdentifie() { |
$this->analyserCookies(); |
/** |
* Retourne true si l'utilisateur est en possession d'un cookie qui |
* l'identifie |
*/ |
public function estIdentifie() { |
return $this->identifie; |
} |
public function connecter($courriel, $mdp, $persistance = false) { |
$url = sprintf($this->urlWsAnnuaire, 'utilisateur'); |
$donnees['methode'] = 'connexion'; |
$donnees['courriel'] = $courriel; |
$donnees['mdp'] = $mdp; |
$donnees['persistance'] = $persistance; |
$json = $this->restClient->ajouter($url, $donnees); |
$forceTableauAssociatif = true; |
$resultat = json_decode($json, $forceTableauAssociatif); |
return $resultat['identifie']; |
/** |
* Retourne l'URL de connexion au SSO |
*/ |
public function getUrlConnexion() { |
return $this->urlConnexionSite; |
} |
private function analyserCookies() { |
$this->analyserCookiesIdentite(); |
$this->analyserCookiesNiveau(); |
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; |
} |
private function analyserCookiesIdentite() { |
if ($this->identifie == false) { |
if (isset($_COOKIE[$this->nomCookieUtilisateurPersistant])) { |
$idTela = $_COOKIE[$this->nomCookieUtilisateurPersistant]; |
$this->extraireMdpEtCourriel($idTela); |
} else if (isset($_COOKIE[$this->nomCookieUtilisateur])) { |
$idTela = $_COOKIE[$this->nomCookieUtilisateur]; |
$this->extraireMdpEtCourriel($idTela); |
} |
} |
} |
private function extraireMdpEtCourriel($idTela) { |
$this->md5Mdp = substr($idTela, 0, 32); |
$this->courriel = substr($idTela, 32); |
$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; |
} |
private function analyserCookiesNiveau() { |
$this->niveau = $this->niveauDefaut; |
if (isset($_COOKIE[$this->nomCookieNiveau])) { |
$this->niveau = $_COOKIE[$this->nomCookieNiveau]; |
/** |
* 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, '-_', '+/')); |
} |
} |
?> |