Subversion Repositories eFlore/Applications.cel

Rev

Rev 763 | Rev 936 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 763 Rev 933
1
<?php
1
<?php
-
 
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
2
/**
3
/**
3
 
-
 
4
 David Delon david.delon@clapas.net 2007
-
 
5
 
-
 
6
 Ce logiciel est r�gi par la licence CeCILL soumise au droit fran�ais et
-
 
7
 respectant les principes de diffusion des logiciels libres. Vous pouvez
-
 
8
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
-
 
9
 de la licence CeCILL telle que diffus�e par le CEA, le CNRS et l'INRIA
-
 
10
 sur le site "http://www.cecill.info".
-
 
11
 En contrepartie de l'accessibilit� au code source et des droits de copie,
-
 
12
 de modification et de redistribution accord�s par cette licence, il n'est
-
 
13
 offert aux utilisateurs qu'une garantie limit�e.  Pour les m�mes raisons,
-
 
14
 seule une responsabilit� restreinte p�se sur l'auteur du programme,  le
-
 
15
 titulaire des droits patrimoniaux et les conc�dants successifs.
-
 
16
 
-
 
17
 A cet �gard  l'attention de l'utilisateur est attir�e sur les risques
-
 
18
 associ�s au chargement,  � l'utilisation,  � la modification et/ou au
-
 
19
 d�veloppement et � la reproduction du logiciel par l'utilisateur �tant
-
 
20
 donn� sa sp�cificit� de logiciel libre, qui peut le rendre complexe �
-
 
21
 manipuler et qui le r�serve donc � des d�veloppeurs et des professionnels
-
 
22
 avertis poss�dant  des  connaissances  informatiques approfondies.  Les
-
 
23
 utilisateurs sont donc invit�s � charger  et  tester  l'ad�quation  du
-
 
24
 logiciel � leurs besoins dans des conditions permettant d'assurer la
-
 
25
 s�curit� de leurs syst�mes et ou de leurs donn�es et, plus g�n�ralement,
-
 
26
 � l'utiliser et l'exploiter dans les m�mes conditions de s�curit�.
-
 
27
 
-
 
28
 Le fait que vous puissiez acc�der � cet en-t�te signifie que vous avez
-
 
29
 pris connaissance de la licence CeCILL, et que vous en avez accept� les
-
 
30
 termes.
4
* PHP Version 5
31
 
-
 
32
 */
-
 
33
 
-
 
34
/*
5
*
35
 * User.php
6
* @category  PHP
36
 *
-
 
37
 * Cas d'utilisation :
7
* @package   jrest
38
 * Service identification utilisateur
8
* @author    David Delon <devid.delon@clapas.net>
39
 *
-
 
40
 *
-
 
41
 * 1: Aucun identifiant ni mot de passe transmis
9
* @author    Aurélien Peronnet <devid.delon@clapas.net>
42
 * 	  1: L'application retourne l'identifiant de session en cours
10
* @copyright 2010 Tela-Botanica
43
 * 	  2: Une identification est toujours active, cette identification est retournee
11
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
44
 *
-
 
45
 * 1: L'application recoit un identifiant et un mot de passe
-
 
46
 *    1 : On tente login
-
 
47
 *    2 : Si reussi etat connecte
-
 
48
 *    3 : sinon pas connecte
12
* @version   SVN: <svn_id>
49
 *
-
 
50
 * 1:  L'application recoit un identifiant et pas de mot de passe :
-
 
51
 *    1 : Deconnection
13
* @link      /doc/jrest/
52
 *
-
 
53
 
-
 
54
/*  En resume :
-
 
55
 *  /User/  : retour id si jamais connecte, sinon retour login_utilisateur
-
 
56
 *  /User/login_utilisateur : logout
-
 
57
 *  /User/login_utilisateur/password : login
-
 
58
 *
-
 
59
*/
14
*/
-
 
15
 
-
 
16
/**
-
 
17
* User.php
-
 
18
*
-
 
19
* Cas d'utilisation :
-
 
20
* Service identification utilisateur
-
 
21
*
-
 
22
*
-
 
23
* 1: Aucun identifiant ni mot de passe transmis
-
 
24
* 	  1: L'application retourne l'identifiant de session en cours
-
 
25
* 	  2: Une identification est toujours active, cette identification est retournee
-
 
26
*
-
 
27
* 1: L'application recoit un identifiant et un mot de passe
-
 
28
*    1 : On tente login
-
 
29
*    2 : Si reussi etat connecte, retour de l'identification obtenue
-
 
30
*    3 : sinon pas connecte, retour d'infos utilisateur anonyme
-
 
31
*
-
 
32
* 1:  L'application recoit un identifiant et pas de mot de passe :
-
 
33
*    1 : Deconnection, retour d'infos utilisateur anonyme
-
 
34
*
-
 
35
*   En resume :
-
 
36
*  /User/  : retour infos utilisateur si connecté sinon infos utilisateur anonyme
-
 
37
*  /User/login_utilisateur : logout retour infos utilisateur anonyme
-
 
38
*  /User/login_utilisateur/password : login retour infos utilisateur si succès sinon infos utilisateur anonyme
-
 
39
*
-
 
40
*/
-
 
41
class User extends Cel {
60
 
-
 
61
 
-
 
62
 
-
 
63
Class User  extends DBAccessor {
-
 
64
 
-
 
65
	function User($config) {
-
 
66
 
-
 
67
		$this->config=$config;
-
 
68
 
-
 
69
	}
-
 
70
 
-
 
71
 
42
 
72
// TODO : controle systematique ....dans tous les services
43
	// TODO : controle systematique ....dans tous les services
73
// Si connected : name cookie = name service
-
 
74
 
-
 
75
 
-
 
76
 
-
 
77
 
44
	// Si connected : name cookie = name service
78
	function getRessource(){
45
	function getRessource(){
79
 
46
 
80
		$expireTime = 60*60*24*100; // 100 jours
-
 
81
		session_set_cookie_params($expireTime);
-
 
82
 
-
 
83
   		$connected=false;
-
 
84
        $admin=false;
47
		$temps_expiration = 60*60*24*100; // 100 jours
-
 
48
		session_set_cookie_params($temps_expiration);
-
 
49
		session_start();
-
 
50
		
85
 
51
		$utilisateur = array('connecte' => false,
-
 
52
							 'id_utilisateur' => session_id(),
-
 
53
							 'courriel' => '',
-
 
54
							 'mot_de_passe' => '',
-
 
55
							 'nom' => '',
-
 
56
							 'prenom' => '',
86
		session_start();
57
							 'licence_acceptee' => '0',
87
		
-
 
88
		if (!$this->GetUser()) {
58
							 'preferences_utilisateur' => ''
89
			
-
 
90
			if (isset($_COOKIE["cel_name"]) && ($this->RememberedUser($_COOKIE["cel_name"], $_COOKIE["cel_password"])))  {
59
							);
91
				$retour= $this->GetUserName();
60
		
92
				$connected=true;
61
		$login_utilisateur = $this->utilisateurEstIdentifie();
93
			}
62
		
94
			else {
-
 
95
				$retour = session_id();
63
		if ($login_utilisateur) {
96
				$connected=false;
-
 
97
			}
-
 
98
		}
-
 
99
		else {
-
 
100
			$retour= $this->GetUserName();
-
 
101
			$connected=true;
-
 
102
		}
-
 
103
 
-
 
104
        $admin = $this->isAdmin($retour) ;
-
 
105
        $licence_acceptee = $this->isLicenceAccepted($retour);
-
 
106
 
-
 
-
 
64
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
107
		$output = json_encode(array($retour,$connected,$admin,$licence_acceptee));
65
			$utilisateur['connecte'] = true;
108
		
-
 
109
		print($output);
66
		}
110
 
-
 
111
	}
-
 
112
 
67
 
113
 
68
		$this->envoyerInfosUtilisateur($utilisateur);
114
   function getElement($uid){
69
	}
115
 
70
 
116
   		$connected=false;
71
   function getElement($uid){
117
 
72
 
118
		session_start();
73
		session_start();	
-
 
74
		$utilisateur = array('connecte' => false,
-
 
75
							 'id_utilisateur' => session_id(),
119
		// Non connecté : verification
76
							 'courriel' => '',
-
 
77
							 'mot_de_passe' => '',
120
		if (isset($uid[1])) { // Identification
78
							 'nom' => '',
-
 
79
							 'prenom' => '',
-
 
80
							 'licence_acceptee' => '0',
121
			if (!$this->GetUser()) { // Si non identifié
81
							 'preferences_utilisateur' => ''
122
				if ($this->LoginUser($uid[0],$uid[1],1)) { // identification reussie
82
							);
123
					$retour= $this->GetUserName();
83
							
124
					$connected=true;
84
		if ($this->identificationEstDemandee($uid)) { 	
125
				}
85
			if (!$utilisateur = $this->utilisateurEstIdentifie()) { 
126
				else {
86
				if ($this->IdentifierUtilisateur($uid[0],$uid[1],1)) { 
127
					$retour = session_id();
87
					$utilisateur= $this->chargerInfosUtilisateur($uid[0]);
128
					$connected=false;
88
					$utilisateur['connecte'] = true;
129
				}
89
				}
130
			}
90
			}
131
			else { // Deja identifié
91
			else {
132
				$retour= $this->GetUserName();
-
 
133
				$connected=true;
-
 
134
			}
92
				$utilisateur = $this->chargerInfosUtilisateur($utilisateur);
135
		}
93
				$utilisateur['connecte'] = true;
136
		else { // Deconnection
-
 
137
			$this->LogoutUser();
-
 
138
			$retour = session_id();
-
 
139
			$connected=false;
-
 
140
		}
-
 
141
 
-
 
142
        $admin = $this->isAdmin($retour) ;
-
 
143
        
94
			}
144
        $licence_acceptee = $this->isLicenceAccepted($retour) ;
-
 
145
 
95
		}
146
		$output = json_encode(array($retour,$connected,$admin,$licence_acceptee));
96
		else {
147
 
-
 
148
		print($output);
97
			$this->DeconnecterUtilisateur();
149
 
98
		}
150
   }
99
 
151
 // USERS
100
		$this->envoyerInfosUtilisateur($utilisateur);
152
 
101
   }
153
	function LoadUser($name) {
102
   
154
 
103
   private function identificationEstDemandee($tableau_param) {
-
 
104
   		return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));
-
 
105
   }
155
		$DB=$this->connectDB($this->config,'database_ident');
106
   
156
    	$query="SELECT ".$this->config['database_ident']['ann_id']." as name, ".$this->config['database_ident']['ann_pwd']." as password FROM ".$this->config['database_ident']['annuaire']." WHERE ".$this->config['database_ident']['ann_id']." ='".$DB->escapeSimple($name)."'";
107
   private function envoyerInfosUtilisateur($utilisateur) {
157
 
108
   	   	
158
   	    $res =& $DB->query($query);
-
 
159
 
-
 
160
	    if (DB::isError($res)) {
109
   		$output = json_encode($utilisateur);
161
  	        die($res->getMessage());
110
		header('content-type: application/json');
162
       	}
111
		print $output;
163
 
112
		exit();
164
	    while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
113
   }
-
 
114
   
165
	    	$password=$row['password'];
115
	function chargerInfosUtilisateur($login) {
-
 
116
		
166
   	    }
117
		$requete_selection_utilisateur = 'SELECT * FROM cel_utilisateurs '.
-
 
118
										'WHERE courriel = '.$this->proteger($login);
167
 
119
							 
-
 
120
		$resultat_selection_utilisateur = $this->requeter($requete_selection_utilisateur);
168
        $admin = $this->isAdmin($name) ;
121
		$retour = false;			
169
        $licence_acceptee = $this->isLicenceAccepted($name) ;
-
 
170
 
122
		
-
 
123
		if(is_array($resultat_selection_utilisateur) && count($resultat_selection_utilisateur) > 0) {			
171
   	    $retour= array("name"=>$name,"password"=>$password,"admin"=>$admin,"licence_acceptee"=>$licence_acceptee);
124
			$retour = $resultat_selection_utilisateur[0];	
172
 
125
		}
173
   	    return $retour;
126
		
174
 
-
 
175
	}
-
 
176
 
-
 
177
 
-
 
178
 
127
		return $retour;
179
    function GetUserName() {
128
	}
180
    	if ($user = $this->GetUser()) {
129
    
181
    	 $name = $user["name"];
130
    private function utilisateurEstIdentifie() {
182
    	}
131
    	   	
-
 
132
    	$login_utilisateur = false;					
-
 
133
		if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {$login_utilisateur = $this->utilisateurEstIdentifieCookie();}
-
 
134
		
-
 
135
		return $login_utilisateur;
183
    	else {
136
    }
184
    	  $name ="";
137
 
185
    	}
138
    function utilisateurEstIdentifieSession() {
-
 
139
    	return (isset($_SESSION["user"]) && isset($_SESSION["user"]["courriel"])) ? $_SESSION["user"]["courriel"] : false;
186
    	return $name;
140
   	}
187
    }
141
   	
188
 
142
   	function utilisateurEstIdentifieCookie() {
189
    function GetUser() {
143
   		return isset($_COOKIE["cel_name"]) && ($this->IdentifierUtilisateurSansEncryptionMotDePasse($_COOKIE["cel_name"], $_COOKIE["cel_password"])) ? $_COOKIE["cel_name"] : false;	
190
    	 return (isset($_SESSION["user"]) ? $_SESSION["user"] : '');
144
   	}
191
   	}
145
 
192
 
146
    function SetUtilisateur($user, $remember=1) {
193
    function SetUser($user, $remember=1) {
147
    	$_SESSION["user"] = $user;
194
    	$_SESSION["user"] = $user;
148
    	$this->SetPersistentCookie("cel_id", $user["id"], $remember);
195
    	$this->SetPersistentCookie("cel_name", $user["name"], $remember);
149
    	$this->SetPersistentCookie("cel_name", $user["name"], $remember);
196
    	$this->SetPersistentCookie("cel_password", $user["password"], $remember);
150
    	$this->SetPersistentCookie("cel_password", $user["password"], $remember);
197
    	$this->SetPersistentCookie("cel_remember", $remember, $remember);
151
    	$this->SetPersistentCookie("cel_remember", $remember, $remember);
198
    }
152
    }
199
 
153
 
200
    function LogoutUser() {
154
    function DeconnecterUtilisateur() {
-
 
155
    	 $_SESSION["user"] = "";
201
    	 $_SESSION["user"] = "";
156
    	 $this->SupprimerCookie("cel_id");
202
    	 $this->DeleteCookie("cel_name");
157
    	 $this->SupprimerCookie("cel_name");
203
    	 $this->DeleteCookie("cel_password");
158
    	 $this->SupprimerCookie("cel_password");
204
    	 $this->DeleteCookie("cel_remember");
159
    	 $this->SupprimerCookie("cel_remember");
205
    }
160
    }
206
 
161
 
207
    function SetPersistentCookie($name, $value, $remember = 1) {
162
    function SetPersistentCookie($name, $value, $remember = 1) {
208
    	SetCookie($name, $value, time() + ($remember ? 90*24*60*60 : 60 * 60),'/');
163
    	SetCookie($name, $value, time() + ($remember ? 90*24*60*60 : 60 * 60),'/');
209
    	$_COOKIE[$name] = $value;
164
    	$_COOKIE[$name] = $value;
210
    }
165
    }
211
 
166
 
212
    function DeleteCookie($name) {
167
    function SupprimerCookie($name) {
213
    	 SetCookie($name, "", 1,'/'); $_COOKIE[$name] = "";
168
    	 SetCookie($name, "", 1,'/'); $_COOKIE[$name] = "";
214
    }
169
    }
215
 
-
 
216
	function LoginUser($name,$password,$remember=1) {
-
 
217
		 if ($existingUser = $this->LoadUser($name)) {
-
 
218
 
-
 
219
		 	if ($password!="debug") {
-
 
220
	            if ($existingUser["password"] == md5($password)) {
-
 
221
    	                $this->SetUser($existingUser, $remember);
-
 
222
        	            return true;
-
 
223
	            }
-
 
224
    	        else {
-
 
225
        	   			return false;
-
 
226
            	}
-
 
227
		 	}
-
 
228
		 	else {
-
 
229
		 		  $this->SetUser($existingUser, $remember);
-
 
230
        	      return true;
-
 
231
		 	}
-
 
232
		 }
-
 
233
	}
-
 
234
 
170
 
235
	function RememberedUser($name,$password,$remember=1) {
-
 
236
		 if ($existingUser = $this->LoadUser($name)) {
-
 
237
            if ($existingUser["password"] == $password) {
-
 
238
                    $this->SetUser($existingUser, $remember);
-
 
239
                    return true;
-
 
240
            }
-
 
241
            else {
-
 
242
           			return false;
-
 
243
            }
-
 
244
		 }
-
 
245
	}
-
 
246
	
-
 
247
	function isLicenceAccepted($utilisateur) {
171
	function IdentifierUtilisateur($login, $mot_de_passe, $remember = 1) {
248
		
172
		
-
 
173
		$identification = false;
-
 
174
		
249
		//print_r($_COOKIE);
175
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {		 	
-
 
176
			if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == "debug") {
250
		
177
    	    	$this->SetUtilisateur($utilisateur, $remember);
-
 
178
        		$identification = true;
-
 
179
	        }
-
 
180
		}
-
 
181
		
-
 
182
		return $identification;
-
 
183
	}
-
 
184
 
-
 
185
	function IdentifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {
-
 
186
		
251
		if($_COOKIE['cel_licence_'.md5($utilisateur)] == 1) {	
187
		$souvenir = false;
252
			return true;
188
 
-
 
189
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
253
		}
190
			if ($utilisateur['mot_de_passe'] == $mot_de_passe) {
254
		
191
				$this->SetUtilisateur($utilisateur, $remember);
-
 
192
				$souvenir = true;
-
 
193
			}
-
 
194
		}
-
 
195
		
255
		if($_COOKIE['cel_licence_'.md5($utilisateur)] == true) {	
196
		return $souvenir;
256
			return true;
197
	}
257
		}
198
	
258
		
199
	private function encrypterMotDePasse($mot_de_passe) {
259
		return false;
200
		return md5($mot_de_passe);
260
	}
201
	}
261
}
202
}
262
 
203
 
263
/* +--Fin du code ---------------------------------------------------------------------------------------+
204
/* +--Fin du code ---------------------------------------------------------------------------------------+
264
* $Log$
205
* $Log$
265
* Revision 1.5  2008-01-30 08:57:28  ddelon
206
* Revision 1.5  2008-01-30 08:57:28  ddelon
266
* fin mise en place mygwt
207
* fin mise en place mygwt
267
*
208
*
268
* Revision 1.4  2007-05-22 12:54:09  ddelon
209
* Revision 1.4  2007-05-22 12:54:09  ddelon
269
* Securisation acces utilisateur
210
* Securisation acces utilisateur
270
*
211
*
271
* Revision 1.3  2007-05-21 18:12:20  ddelon
212
* Revision 1.3  2007-05-21 18:12:20  ddelon
272
* Gestion des importations locale de releves
213
* Gestion des importations locale de releves
273
*
214
*
274
*
215
*
275
*/
216
*/
276
 
-
 
277
?>
217
?>
278
218