<?php
/**

 David Delon david.delon@clapas.net 2007

 Ce logiciel est r�gi par la licence CeCILL soumise au droit fran�ais et
 respectant les principes de diffusion des logiciels libres. Vous pouvez
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
 de la licence CeCILL telle que diffus�e par le CEA, le CNRS et l'INRIA
 sur le site "http://www.cecill.info".
 En contrepartie de l'accessibilit� au code source et des droits de copie,
 de modification et de redistribution accord�s par cette licence, il n'est
 offert aux utilisateurs qu'une garantie limit�e.  Pour les m�mes raisons,
 seule une responsabilit� restreinte p�se sur l'auteur du programme,  le
 titulaire des droits patrimoniaux et les conc�dants successifs.

 A cet �gard  l'attention de l'utilisateur est attir�e sur les risques
 associ�s au chargement,  � l'utilisation,  � la modification et/ou au
 d�veloppement et � la reproduction du logiciel par l'utilisateur �tant
 donn� sa sp�cificit� de logiciel libre, qui peut le rendre complexe �
 manipuler et qui le r�serve donc � des d�veloppeurs et des professionnels
 avertis poss�dant  des  connaissances  informatiques approfondies.  Les
 utilisateurs sont donc invit�s � charger  et  tester  l'ad�quation  du
 logiciel � leurs besoins dans des conditions permettant d'assurer la
 s�curit� de leurs syst�mes et ou de leurs donn�es et, plus g�n�ralement,
 � l'utiliser et l'exploiter dans les m�mes conditions de s�curit�.

 Le fait que vous puissiez acc�der � cet en-t�te signifie que vous avez
 pris connaissance de la licence CeCILL, et que vous en avez accept� les
 termes.

 */

/*
 * User.php
 *
 * Cas d'utilisation :
 * Service identification utilisateur
 *
 *
 * 1: Aucun identifiant ni mot de passe transmis
 * 	  1: L'application retourne l'identifiant de session en cours
 * 	  2: Une identification est toujours active, cette identification est retournee
 *
 * 1: L'application recoit un identifiant et un mot de passe
 *    1 : On tente login
 *    2 : Si reussi etat connecte
 *    3 : sinon pas connecte
 *
 * 1:  L'application recoit un identifiant et pas de mot de passe :
 *    1 : Deconnection
 *

/*  En resume :
 *  /User/  : retour id si jamais connecte, sinon retour login_utilisateur
 *  /User/login_utilisateur : logout
 *  /User/login_utilisateur/password : login
 *
*/



Class User  extends DBAccessor {

	function User($config) {

		$this->config=$config;

	}


// TODO : controle systematique ....dans tous les services
// Si connected : name cookie = name service




	function getRessource(){

		$expireTime = 60*60*24*100; // 100 jours
		session_set_cookie_params($expireTime);

   		$connected=false;
        $admin=false;

		session_start();

		if (!$this->GetUser()) {
			if (isset($_COOKIE["cel_name"]) && ($this->RememberedUser($_COOKIE["cel_name"], $_COOKIE["cel_password"])))  {
				$retour= $this->GetUserName();
				$connected=true;
			}
			else {
				$retour = session_id();
				$connected=false;
			}
		}
		else {
			$retour= $this->GetUserName();
			$connected=true;
		}

        $admin = $this->isAdmin($retour) ;
        $licence_acceptee = $this->isLicenceAccepted($retour);

		$output = json_encode(array($retour,$connected,$admin,$licence_acceptee));
		print($output);

	}


   function getElement($uid){

   		$connected=false;

		session_start();
		// Non connect� : verification
		if (isset($uid[1])) { // Identification
			if (!$this->GetUser()) { // Si non identifi�
				if ($this->LoginUser($uid[0],$uid[1],1)) { // identification reussi
					$retour= $this->GetUserName();
					$connected=true;
				}
				else {
					$retour = session_id();
					$connected=false;
				}
			}
			else { // Deja identifi�
				$retour= $this->GetUserName();
				$connected=true;
			}
		}
		else { // Deconnection
			$this->LogoutUser();
			$retour = session_id();
			$connected=false;
		}

        $admin = $this->isAdmin($retour) ;
        
        $licence_acceptee = $this->isLicenceAccepted($retour) ;

		$output = json_encode(array($retour,$connected,$admin,$licence_acceptee));

		print($output);

   }
 // USERS

	function LoadUser($name) {

		$DB=$this->connectDB($this->config,'database_ident');
    	$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)."'";


   	    $res =& $DB->query($query);

	    if (DB::isError($res)) {
  	        die($res->getMessage());
       	}

	    while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
	    	$password=$row['password'];
   	    }

        $admin = $this->isAdmin($name) ;
        $licence_acceptee = $this->isLicenceAccepted($name) ;

   	    $retour= array("name"=>$name,"password"=>$password,"admin"=>$admin,"licence_acceptee"=>$licence_acceptee);

   	    return $retour;

	}



    function GetUserName() {
    	if ($user = $this->GetUser()) {
    	 $name = $user["name"];
    	}
    	else {
    	  $name ="";
    	}
    	return $name;
    }

    function GetUser() {
    	 return (isset($_SESSION["user"]) ? $_SESSION["user"] : '');
   	}

    function SetUser($user, $remember=1) {
    	$_SESSION["user"] = $user;
    	$this->SetPersistentCookie("cel_name", $user["name"], $remember);
    	$this->SetPersistentCookie("cel_password", $user["password"], $remember);
    	$this->SetPersistentCookie("cel_remember", $remember, $remember);
    }

    function LogoutUser() {
    	 $_SESSION["user"] = "";
    	 $this->DeleteCookie("cel_name");
    	 $this->DeleteCookie("cel_password");
    	 $this->DeleteCookie("cel_remember");
    }

    function SetPersistentCookie($name, $value, $remember = 1) {
    	SetCookie($name, $value, time() + ($remember ? 90*24*60*60 : 60 * 60),'/');
    	$_COOKIE[$name] = $value;
    }

    function DeleteCookie($name) {
    	 SetCookie($name, "", 1,'/'); $_COOKIE[$name] = "";
    }

	function LoginUser($name,$password,$remember=1) {
		 if ($existingUser = $this->LoadUser($name)) {

		 	if ($password!="debug") {
	            if ($existingUser["password"] == md5($password)) {
    	                $this->SetUser($existingUser, $remember);
        	            return true;
	            }
    	        else {
        	   			return false;
            	}
		 	}
		 	else {
		 		  $this->SetUser($existingUser, $remember);
        	      return true;
		 	}
		 }
	}

	function RememberedUser($name,$password,$remember=1) {
		 if ($existingUser = $this->LoadUser($name)) {
            if ($existingUser["password"] == $password) {
                    $this->SetUser($existingUser, $remember);
                    return true;
            }
            else {
           			return false;
            }
		 }
	}
	
	function isLicenceAccepted($utilisateur) {
		
		//print_r($_COOKIE);
		
		if($_COOKIE['cel_licence_'.md5($utilisateur)] == 1) {	
			return true;
		}
		
		if($_COOKIE['cel_licence_'.md5($utilisateur)] == true) {	
			return true;
		}
		
		return false;
	}
}

/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.5  2008-01-30 08:57:28  ddelon
* fin mise en place mygwt
*
* Revision 1.4  2007-05-22 12:54:09  ddelon
* Securisation acces utilisateur
*
* Revision 1.3  2007-05-21 18:12:20  ddelon
* Gestion des importations locale de releves
*
*
*/

?>