| 1055 | aurelien | 1 | <?php
 | 
        
           |  |  | 2 | /**
 | 
        
           |  |  | 3 | * Classe de controle d'accès utilisant l'authentification http pour bloquer ou autoriser l'accès.
 | 
        
           |  |  | 4 | * Elle offre des méthodes permettant de réserver l'accès à une section aux admins ou bien aux utilisateurs identifiés
 | 
        
           |  |  | 5 | *
 | 
        
           |  |  | 6 | * @category php 5.2
 | 
        
           |  |  | 7 | * @package del
 | 
        
           |  |  | 8 | * @author Aurélien Peronnet <aurelien@tela-botanica.org>
 | 
        
           |  |  | 9 | * @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
 | 
        
           |  |  | 10 | * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 | 
        
           |  |  | 11 | * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 | 
        
           |  |  | 12 | * @version	$Id$
 | 
        
           |  |  | 13 | */
 | 
        
           |  |  | 14 | class ControleAcces {
 | 
        
           |  |  | 15 |   | 
        
           |  |  | 16 | 	private $conteneur;
 | 
        
           |  |  | 17 | 	private $gestionBdd;
 | 
        
           | 1249 | aurelien | 18 | 	private $bdd;
 | 
        
           | 1055 | aurelien | 19 |   | 
        
           |  |  | 20 | 	public function __construct($conteneur) {
 | 
        
           |  |  | 21 | 		$this->conteneur = $conteneur;
 | 
        
           |  |  | 22 | 		$this->gestionBdd = $conteneur->getGestionBdd();
 | 
        
           | 1249 | aurelien | 23 | 		$this->bdd = $this->gestionBdd->getBdd();
 | 
        
           | 1055 | aurelien | 24 | 	}
 | 
        
           |  |  | 25 |   | 
        
           |  |  | 26 | 	public function demanderAuthentificationAdmin() {
 | 
        
           |  |  | 27 | 		if(!$this->etreAdminAutorise()) {
 | 
        
           |  |  | 28 | 			$this->authentifierAdmin();
 | 
        
           |  |  | 29 | 		}
 | 
        
           |  |  | 30 | 	}
 | 
        
           |  |  | 31 |   | 
        
           |  |  | 32 | 	public function demanderAuthentificationUtilisateur() {
 | 
        
           |  |  | 33 | 		if(!$this->etreUtilisateurAutorise()) {
 | 
        
           |  |  | 34 | 			$this->authentifierUtilisateur();
 | 
        
           |  |  | 35 | 		}
 | 
        
           |  |  | 36 | 	}
 | 
        
           |  |  | 37 |   | 
        
           |  |  | 38 | 	public function etreUtilisateurAutorise() {
 | 
        
           |  |  | 39 | 		$identifiant = $this->getAuthIdentifiant();
 | 
        
           |  |  | 40 | 		$mdp = $this->getAuthMotDePasse();
 | 
        
           |  |  | 41 | 		$existe = $this->obtenirUtilisateur($identifiant, $mdp);
 | 
        
           |  |  | 42 |   | 
        
           |  |  | 43 | 		$autorisation = (isset($existe) && $existe) ? true :false;
 | 
        
           |  |  | 44 | 		return $autorisation;
 | 
        
           |  |  | 45 | 	}
 | 
        
           |  |  | 46 |   | 
        
           |  |  | 47 | 	private function obtenirUtilisateur($login, $motDePasse) {
 | 
        
           |  |  | 48 | 		$requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du').
 | 
        
           |  |  | 49 | 						'WHERE courriel = '.$this->gestionBdd->getBdd()->proteger($login).' '.
 | 
        
           |  |  | 50 | 						'AND mot_de_passe = MD5('.$this->gestionBdd->getBdd()->proteger($motDePasse).')';
 | 
        
           | 1459 | raphael | 51 | 		$utilisateur = $this->gestionBdd->getBdd()->recuperer($requete . ' -- ' . __FILE__ . ':' . __LINE__);
 | 
        
           | 1055 | aurelien | 52 | 		return $utilisateur;
 | 
        
           |  |  | 53 | 	}
 | 
        
           |  |  | 54 |   | 
        
           | 1249 | aurelien | 55 | 	private function obtenirUtilisateurSansEncryptionMdp($login, $motDePasseEncrypte) {
 | 
        
           |  |  | 56 | 		$requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du').
 | 
        
           |  |  | 57 | 							'WHERE courriel = '.$this->gestionBdd->getBdd()->proteger($login).' '.
 | 
        
           |  |  | 58 | 							'AND mot_de_passe = '.$this->gestionBdd->getBdd()->proteger($motDePasseEncrypte).' ';
 | 
        
           | 1459 | raphael | 59 | 		$utilisateur = $this->gestionBdd->getBdd()->recuperer($requete . ' -- ' . __FILE__ . ':' . __LINE__);
 | 
        
           | 1249 | aurelien | 60 | 		return $utilisateur;
 | 
        
           |  |  | 61 | 	}
 | 
        
           |  |  | 62 |   | 
        
           | 1055 | aurelien | 63 | 	public function etreAdminAutorise() {
 | 
        
           |  |  | 64 | 		$identifiant = $this->getAuthIdentifiant();
 | 
        
           |  |  | 65 | 		$autorisation = ($this->etreAdminDel($identifiant) && $this->etreUtilisateurAutorise()) ? true : false;
 | 
        
           |  |  | 66 | 		return $autorisation;
 | 
        
           |  |  | 67 | 	}
 | 
        
           |  |  | 68 |   | 
        
           |  |  | 69 | 	public function etreAdminDel($courriel) {
 | 
        
           |  |  | 70 | 		$admins = Config::get('admins');
 | 
        
           |  |  | 71 | 		$courriels_autorises = explode(',', $admins);
 | 
        
           |  |  | 72 | 		$autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ;
 | 
        
           |  |  | 73 | 		return $autorisation;
 | 
        
           |  |  | 74 | 	}
 | 
        
           |  |  | 75 |   | 
        
           |  |  | 76 | 	private function getAuthIdentifiant() {
 | 
        
           |  |  | 77 | 		$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null;
 | 
        
           |  |  | 78 | 		return $id;
 | 
        
           |  |  | 79 | 	}
 | 
        
           |  |  | 80 |   | 
        
           |  |  | 81 | 	private function getAuthMotDePasse() {
 | 
        
           |  |  | 82 | 		$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null;
 | 
        
           |  |  | 83 | 		return $mdp;
 | 
        
           |  |  | 84 | 	}
 | 
        
           |  |  | 85 |   | 
        
           |  |  | 86 | 	//TODO: externaliser noms et adresses spécifiques à Tela Botanica
 | 
        
           |  |  | 87 | 	private function authentifierAdmin() {
 | 
        
           |  |  | 88 | 		$message_accueil = "Veuillez vous identifier avec votre compte administrateur Tela Botanica.";
 | 
        
           |  |  | 89 | 		$message_echec = "Accès limité aux administrateurs de DEL.\n".
 | 
        
           |  |  | 90 | 					"Votre tentative d'identification a échoué.\n".
 | 
        
           |  |  | 91 | 					"Actualiser la page pour essayer à nouveau si vous êtes bien inscrit comme administrateur.";
 | 
        
           |  |  | 92 | 		return $this->authentifier($message_accueil, $message_echec, 'Admin');
 | 
        
           |  |  | 93 | 	}
 | 
        
           |  |  | 94 |   | 
        
           |  |  | 95 | 	private function authentifierUtilisateur() {
 | 
        
           |  |  | 96 | 		$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica.";
 | 
        
           |  |  | 97 | 		$message_echec = "Accès limité aux utilisateurs de DEL.\n".
 | 
        
           |  |  | 98 | 				"Inscrivez vous http://www.tela-botanica.org/page:inscription pour le devenir.\n".
 | 
        
           |  |  | 99 | 				"Votre tentative d'identification a échoué.\n".
 | 
        
           |  |  | 100 | 				"Actualiser la page pour essayer à nouveau si vous êtes déjà inscrit ou contacter 'accueil@tela-botanica.org'.";
 | 
        
           |  |  | 101 | 		return $this->authentifier($message_accueil, $message_echec, 'Utilisateur');
 | 
        
           |  |  | 102 | 	}
 | 
        
           |  |  | 103 |   | 
        
           |  |  | 104 | 	private function authentifier($message_accueil, $message_echec, $type) {
 | 
        
           |  |  | 105 | 		$id = $this->getAuthIdentifiant();
 | 
        
           |  |  | 106 | 		if (!isset($id)) {
 | 
        
           |  |  | 107 | 			$this->envoyerAuth($message_accueil, $message_echec);
 | 
        
           |  |  | 108 | 		} else {
 | 
        
           |  |  | 109 | 			if ($type == 'Utilisateur' && $this->getAuthMotDePasse() == 'debug') {
 | 
        
           |  |  | 110 | 				$autorisation = true;
 | 
        
           |  |  | 111 | 			} else {
 | 
        
           |  |  | 112 | 				$methodeAutorisation = "etre{$type}Autorise";
 | 
        
           |  |  | 113 | 				$autorisation = $this->$methodeAutorisation();
 | 
        
           |  |  | 114 | 			}
 | 
        
           |  |  | 115 | 			if ($autorisation == false) {
 | 
        
           |  |  | 116 | 				$this->envoyerAuth($message_accueil, $message_echec);
 | 
        
           |  |  | 117 | 			}
 | 
        
           |  |  | 118 | 		}
 | 
        
           |  |  | 119 | 		return true;
 | 
        
           |  |  | 120 | 	}
 | 
        
           |  |  | 121 |   | 
        
           | 1249 | aurelien | 122 | 	public function getInfosUtilisateurConnecte() {
 | 
        
           |  |  | 123 | 		$utilisateur = false;
 | 
        
           |  |  | 124 | 		if (isset($_SESSION["del_utilisateur"])) {
 | 
        
           |  |  | 125 | 			$utilisateur = $_SESSION["del_utilisateur"];
 | 
        
           |  |  | 126 | 		} else if(isset($_COOKIE["del_courriel"])) {
 | 
        
           |  |  | 127 | 			$utilisateur = array('del_courriel' => $_COOKIE["del_courriel"],
 | 
        
           |  |  | 128 | 								'del_password' => $_COOKIE["del_password"]);
 | 
        
           |  |  | 129 | 		}
 | 
        
           |  |  | 130 |   | 
        
           |  |  | 131 | 		if($utilisateur !== false) {
 | 
        
           |  |  | 132 | 			$utilisateur = $this->obtenirUtilisateurSansEncryptionMdp($utilisateur['del_courriel'], $utilisateur['del_password']);
 | 
        
           |  |  | 133 | 		}
 | 
        
           |  |  | 134 |   | 
        
           |  |  | 135 | 		return $utilisateur;
 | 
        
           | 1055 | aurelien | 136 | 	}
 | 
        
           | 1472 | aurelien | 137 |   | 
        
           |  |  | 138 | 	public function getIdAnonymeTemporaire() {
 | 
        
           |  |  | 139 | 		if(session_id() == '') {
 | 
        
           |  |  | 140 | 			// modifier ce test lors du passage en php 5.4
 | 
        
           |  |  | 141 | 		    session_start();
 | 
        
           |  |  | 142 | 		}
 | 
        
           |  |  | 143 | 		return session_id();
 | 
        
           |  |  | 144 | 	}
 | 
        
           | 1055 | aurelien | 145 | }
 |