<?
/*
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;
}
}
}
?>