* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org) * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL * @version $Id$ */ class ControleAcces { private $conteneur; private $gestionBdd; private $bdd; public function __construct($conteneur) { $this->conteneur = $conteneur; $this->gestionBdd = $conteneur->getGestionBdd(); $this->bdd = $this->gestionBdd->getBdd(); } public function demanderAuthentificationAdmin() { if(!$this->etreAdminAutorise()) { $this->authentifierAdmin(); } } public function demanderAuthentificationUtilisateur() { if(!$this->etreUtilisateurAutorise()) { $this->authentifierUtilisateur(); } } public function etreUtilisateurAutorise() { $identifiant = $this->getAuthIdentifiant(); $mdp = $this->getAuthMotDePasse(); $existe = $this->obtenirUtilisateur($identifiant, $mdp); $autorisation = (isset($existe) && $existe) ? true :false; return $autorisation; } private function obtenirUtilisateur($login, $motDePasse) { $requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du'). 'WHERE courriel = '.$this->gestionBdd->getBdd()->proteger($login).' '. 'AND mot_de_passe = MD5('.$this->gestionBdd->getBdd()->proteger($motDePasse).')'; $utilisateur = $this->gestionBdd->getBdd()->recuperer($requete . ' -- ' . __FILE__ . ':' . __LINE__); return $utilisateur; } private function obtenirUtilisateurSansEncryptionMdp($login, $motDePasseEncrypte) { $requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du'). 'WHERE courriel = '.$this->gestionBdd->getBdd()->proteger($login).' '. 'AND mot_de_passe = '.$this->gestionBdd->getBdd()->proteger($motDePasseEncrypte).' '; $utilisateur = $this->gestionBdd->getBdd()->recuperer($requete . ' -- ' . __FILE__ . ':' . __LINE__); return $utilisateur; } public function etreAdminAutorise() { $identifiant = $this->getAuthIdentifiant(); $autorisation = ($this->etreAdminDel($identifiant) && $this->etreUtilisateurAutorise()) ? true : false; return $autorisation; } public function etreAdminDel($courriel) { $admins = Config::get('admins'); $courriels_autorises = explode(',', $admins); $autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ; return $autorisation; } private function getAuthIdentifiant() { $id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null; return $id; } private function getAuthMotDePasse() { $mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null; return $mdp; } //TODO: externaliser noms et adresses spécifiques à Tela Botanica private function authentifierAdmin() { $message_accueil = "Veuillez vous identifier avec votre compte administrateur Tela Botanica."; $message_echec = "Accès limité aux administrateurs de DEL.\n". "Votre tentative d'identification a échoué.\n". "Actualiser la page pour essayer à nouveau si vous êtes bien inscrit comme administrateur."; return $this->authentifier($message_accueil, $message_echec, 'Admin'); } private function authentifierUtilisateur() { $message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica."; $message_echec = "Accès limité aux utilisateurs de DEL.\n". "Inscrivez vous http://www.tela-botanica.org/page:inscription pour le devenir.\n". "Votre tentative d'identification a échoué.\n". "Actualiser la page pour essayer à nouveau si vous êtes déjà inscrit ou contacter 'accueil@tela-botanica.org'."; return $this->authentifier($message_accueil, $message_echec, 'Utilisateur'); } private function authentifier($message_accueil, $message_echec, $type) { $id = $this->getAuthIdentifiant(); if (!isset($id)) { $this->envoyerAuth($message_accueil, $message_echec); } else { if ($type == 'Utilisateur' && $this->getAuthMotDePasse() == 'debug') { $autorisation = true; } else { $methodeAutorisation = "etre{$type}Autorise"; $autorisation = $this->$methodeAutorisation(); } if ($autorisation == false) { $this->envoyerAuth($message_accueil, $message_echec); } } return true; } public function getInfosUtilisateurConnecte() { if(isset($_COOKIE["del_courriel"])) { $utilisateur = array('del_courriel' => $_COOKIE["del_courriel"], 'del_mot_de_passe' => $_COOKIE["del_mot_de_passe"]); $utilisateur = $this->obtenirUtilisateurSansEncryptionMdp($utilisateur['del_courriel'], $utilisateur['del_mot_de_passe']); } return $utilisateur; } public function getIdAnonymeTemporaire() { $this->demarrerSession(); return session_id(); } private function demarrerSession() { if(session_id() == '') { // modifier ce test lors du passage en php 5.4 session_start(); } } }