Subversion Repositories eFlore/Applications.del

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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() {
1478 aurelien 123
		if(isset($_COOKIE["del_courriel"])) {
1249 aurelien 124
			$utilisateur = array('del_courriel' => $_COOKIE["del_courriel"],
1478 aurelien 125
								'del_mot_de_passe' => $_COOKIE["del_mot_de_passe"]);
126
			$utilisateur = $this->obtenirUtilisateurSansEncryptionMdp($utilisateur['del_courriel'], $utilisateur['del_mot_de_passe']);
1249 aurelien 127
		}
128
 
129
		return $utilisateur;
1055 aurelien 130
	}
1472 aurelien 131
 
132
	public function getIdAnonymeTemporaire() {
1475 aurelien 133
		$this->demarrerSession();
134
		return session_id();
135
	}
136
 
137
	private function demarrerSession() {
1472 aurelien 138
		if(session_id() == '') {
139
			// modifier ce test lors du passage en php 5.4
1475 aurelien 140
			session_start();
1472 aurelien 141
		}
142
	}
1055 aurelien 143
}