Subversion Repositories eFlore/Applications.del

Rev

Rev 1249 | Rev 1472 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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