Location: PHPKode > scripts > PXAServer > pxaserver/libreria/Autentica.class.php
<?
/*
  Libreria di classi per l'autenticazione con chiave privata
  Guerrieri Luca hide@address.com
*/

class Autentica {

	//Classe per l'autenticazione
	var $username;
	var $password;
	var $check_username_result;				//bool risultato username dell'autenticazione
	var $check_password_result;				//bool risultato password dell'autenticazione
	var $link;								//il link alla connessione del database
	var $login_array;						//array risultato dal login
	var $passed_md5;						//password memorizzata nel db associata allo username
	var $captcha;							//la stringa generata dal sistema captcha
	var $log;								//oggetto di tipo LOGmanager èer il logging
	var $ses;								//oggetto di tipo Session per le sessioni
	var $user_status;						//status dell'utente

	function Autentica (){
	//costruttore
		require ('config.inc.php');    		//Richiede il file di configurazione generale
		//require ('MSGmanager.class.php');
	  	$this -> error= new MSGmanager;		//Istanzia la classe dei messaggi di errore
	  	$this -> log = new LOGmanager;		//Istanzia la classe per il logging delle attività
	  	$this -> ses = new Session;
	}
	//Metodo per effettuare il login
	function login($username, $password, $md5) {
	//prende in carico il  login ed inizia l'autenticazione
		$this->username=$username;
		$this->password=$password;
		$this->passed_md5=$md5;
		$this->check_username();	//chiama il metodo check_username per controllare se esiste lo $username
	}

	//Metodo che controlla l'esistenza dell'utente
	function check_username() {
	//si connette al db e controlla se l'utente esiste altrimenti rilascia un messaggio di errore
		$link=db_connect();
		$Qm = new QueryManager;
		$Qm ->set_query('Q_username');
		$Qm ->set_placeholders(array('username'));							//imposto i nomi dei placeholders nella query come array
		$Qm ->set_data(array($this->username));								//imposto i nomi delle variabili nella query come array
		$Qr = new QueryResult($Qm ->get_dynamic_query(),"assoc",$link);		//rilascia un array con il risultato della query eseguita
		$this-> login_array=$Qr->result;
		db_close($link);
		if ((!is_array($this-> login_array))||(is_null($this-> login_array))){
	   		print ($this->error->print_error('Autentica: attenzione il risultato non è un array o è nullo quindi '));
	  	}else {
			if (count ($this->login_array)>0){
				$this->set_check_username_result(true);			//username buono
				$this -> set_user_status($this->login_array[0]['status']);
			}else {
				$this->set_check_username_result(false);		//username no buono
				//messaggio di non login e reload della stessa pagina
			}
		}
	}
	//Metodo per impostare lo status di un utente
	function set_user_status($status){
		$this -> user_status=$status;
	}
	//Metodoche restituisce lo status di un utente
	function get_user_status ($username){
		return $this-> user_status;
	}
	//Metodo che controlla se la password inserita è giusta
	function check_password($password){
		//Inserire il controllo della password criptata
		if ($this->password == $password){
			//la password è giusta
			return $this->set_check_password_result(true);
		}else {
			//la password non è giusta
			return $this->set_check_password_result(false);
		}
	}
	//Metodo che restituisce la stringa generata dal sistema Captcha
	function get_generate_captcha (){
		return $this -> captcha;
	}
	//Metodo che restituisce la stringa di login in MD5 dopo aver preso in input username e password
	//verificati, ad esso sommiamo la stringa captcha letta dalla variabile di sessione captcha
	function get_MD5_login ($verified_username, $password){
		$sx = new Session;
		$info = $verified_username.$password .$sx -> get_session_value("captcha");
		return md5 ($info);
	}
	//Metodo che rilascia il risultato dell'autenticazione
	function get_check_username_result(){
		return $this->check_username_result;
	}
	//Metodo per impostare la stringa generata dal sistema Captcha
	function set_generate_captcha ($string_captcha){
		$this -> captcha=$string_captcha;
	}
	//Metodo che imposta il risultato dell'autenticazione
	function set_check_username_result($result){
		$this->check_username_result=$result;
	}
	//Metodo che imposta il risultato dell'autenticazione
	function set_check_password_result($result){
		$this->check_password_result=$result;
	}
	//Metodo che rilascia il risultato dell'autenticazione
	function get_check_password_result(){
		return $this->check_password_result;
	}
	//Metodo che esegue le operazioni in seguito all'esito del tentativo di login
	//Se lo username è valido, si calcola l'hash di username+password(letta dal db non quella inserita dall'utente)e
	//stringa captcha proveniente dalla variabile di sessione
	//se il risultato l'hash corrisponde all'hash inviato dall'utente allora login positivo
	function login_result (){
		if ($this->get_check_username_result()==true){		//login con successo
			//lo username esiste ora controlliamo se la password è giusta
			//$this-> check_password(($this->login_array[0]['password']));
			if ($this -> get_user_status($this->username)=="enabled"){
				//se lo status dell'utente trovato è attivo
				if ($this->passed_md5 == $this -> get_MD5_login($this->username,$this->login_array[0]['password'])){
				//username giusto password giusta ed md5 giusto- si sei proprio tu!!!
					//Invochiamo LOGManager per scrivere il risultato
					$this->log -> write_log_file($this->username.".log",$this->username." - login con successo");
					//Invochiamo Sessione per impostarla con lo username ed il livello
					$this -> ses -> set_session_var("username",$this->login_array[0]['username']);
					$this -> ses -> set_session_var("level",$this->login_array[0]['level']);
					//invochiamo il session manager per registrare la variabile di sessione $login=success
					$this -> ses -> set_session_var("login","success");
					return true;
				}else {
					//username giusto e password o md5 sbagliato
					//Invochiamo LOGManager per scrivere il risultato
					$this->log -> write_log_file($this->username.".log",$this->username." - login errato per password o hash");
					return false;
				}
			}else {
			//se lo status dell'utente trovato è disabled
			$this->log -> write_log_file($this->username.".log",$this->username." - utente disabilitato");
			}
		}else {										//login fallito username non esistente
			//lo username inserito non esiste
			//Invochiamo LOGManager per scrivere il risultato
			$this->log -> write_log_file("application.log",$this->username." - login errato username inesistente");
			return false;
		}
	}
}
?>
Return current item: PXAServer