session_auth/caldap.php


Home Back

<?php

    $session_keyname
='keydb';
    
date_default_timezone_set('Europe/Rome');
    
    
#$nav=file_get_contents('nav.php');
    
$footer=file_get_contents('views/footer.php');
    
$login_error='<article><header>Login error</header><p>Errore nel login.</p></article>';
    
$htmlFormLogin='<form action="'.$_SERVER['REQUEST_URI'].'" method="post">
                <main style="text-align: center;padding-top:10px;padding-bottom:20px" >
                <img src="/dash/views/img/despalmes_logo.png" style="height:100px">
                </main>
                <article class="loginbox">
                <header>Autenticazione</header>
                <p style="font-size: 12px" >Autenticazione sperimentale su ldap con db mysql.Utilizzo il database di appoggio per evitare troppe query al server ldap.<br>
                Il tutto nell\' ottica di sviluppare una <a href="/dash">Intranet aziendale.</a> Un giorno.</p>
                <p style="font-size: 12px" >Inserisci le stesse credenziali che usi per fare il login sul pc dell\'ufficio.</p>
                <div><label> Utente: <input id="username" name="username" type="text" placeholder="Inserisci utente"></label></div>
                <div><label> Password: <input id="password" name="password" type="password" placeholder="Inserisci password"></label></div>
                <div><button id="login_btn" name="login_btn" >Login</button></div>
                </article>
                </form></article>'
.$footer;
            
      
$session_user='hdp_intranet_admins_user_ldap';
      
$session_pass='hdp_intranet_admins_pass_ldap';
      
$session_is_logged='hdp_intranet_logged_ldap';      

    function 
checkIfKeySessionExsist($keyname)
    {
        if (!isset(
$_SESSION[$keyname])) 
        {
            return 
false;
        }else{
            return 
true;
        }
    }
    
        
    function 
checkUsername($username)
    {
        if (
ctype_alnum($username)) {
           return 
true;
        }else{
            return 
false;
        }
    }
    
    function 
checkPassword($password)
    {
        if (
ctype_alnum($password)) {
           return 
true;
        }else{
            return 
false;
        }
    }
    
    function 
genRandomStringFromUsername($user)
    {
        
$now = new DateTime();
        
$timestamp=$now->getTimestamp();
        
$ret=md5($timestamp.$user.$timestamp);
        return 
$ret;
    }
    
    function 
loginLdap($user,$pass)
    {
        
$output=[];
        
        
/*$pass=str_replace("\\","\\\\",$pass);
        $pass=str_replace(";","\\;",$pass);
        
        $user=str_replace("$","\\$",$user);
        $pass=str_replace("$","\\$",$pass);*/
        
        
$cmd=escapeshellcmd("python ./ldap.py $user $pass");
        
exec($cmd$output);
        if (
$output[0]=='0')
        {
            return 
true;
        }else{
            return 
false;    
        }

    }
    
    function 
loginErrorAction($msg)
    {
        echo 
$msg;
        die();
    }
    
    function 
loginKey($username,$keycode)
    {
        global 
$DSN;
        global 
$DBUSER;
        global 
$DBPASS;
        try{
            
$dbh = new PDO($DSN$DBUSER$DBPASS);    
            
$sql "select id from `ldap_users` where username=? and keycode=? ";

            
$stmt $dbh->prepare($sql);
            
            if (! 
$stmt->execute([$username,$keycode]) ) echo "<b>Errore nella query.</b>";
            
$result $stmt->fetchAll();
            
            if (!empty(
$result)) 
            {
                return 
true;
            }else{
                return 
false;
            }
        }catch (
PDOException $err) {
            print 
"Problemi nella connessione al database: <br>" $err->getMessage() . "<br/>";
            return 
false;
        }
    }
    
    function 
checkIfRecordExsist($username)
    {
        global 
$DSN;
        global 
$DBUSER;
        global 
$DBPASS;
        try{
            
$dbh = new PDO($DSN$DBUSER$DBPASS);    
            
$sql "select * from ldap_users where username like :username ";

            
$stmt $dbh->prepare($sql);
            
$stmt->bindParam('username'$usernamePDO::PARAM_STR);
            
            if (! 
$stmt->execute() ) echo "<b>Errore nella query.</b>";
            
$result $stmt->fetchAll();
            
#echo 'Username: '. $result["username"];
            
            
if (count($result)>0
            {
                return 
true;
            }else{
                return 
false;
            }
        }catch (
PDOException $err) {
            print 
"<article>in function checkIfRecordExsist : " $err->getMessage() . "</article>";
            return 
false;
        }
    }
    
    function 
deleteUsername($username)
    {
        global 
$DSN;
        global 
$DBUSER;
        global 
$DBPASS;
        try{
            
$dbh = new PDO($DSN$DBUSER$DBPASS);    
            
$sql "delete from ldap_users where username like :username ";

            
$stmt $dbh->prepare($sql);
            
$stmt->bindParam('username'$usernamePDO::PARAM_STR);
            
            if (! 
$stmt->execute() ) echo "<b>Errore nella query.</b>";
            
            return 
true;
        }catch (
PDOException $err) {
            print 
"<article>in function deleteUsername : " $err->getMessage() . "</article>";
            return 
false;
        }
    }

    
    
    function 
insertKey($username,$keycode)
    {
        global 
$DSN;
        global 
$DBUSER;
        global 
$DBPASS;
        
$date date("Y-m-d H:i:s");
    
        try{
            
$dbh = new PDO($DSN$DBUSER$DBPASS);    
            
            if (!
checkIfRecordExsist($username))
            {
                
$sql "INSERT INTO `ldap_users` ( `username`, `keycode`, `type`, `lastlogin`) VALUES (:username,:keycode,1,:date)";
                
$stmt $dbh->prepare($sql);
                
$stmt->bindParam('username'$usernamePDO::PARAM_STR);
                
$stmt->bindParam('keycode'$keycodePDO::PARAM_STR);
                
$stmt->bindParam('date'$datePDO::PARAM_STR);
            }else{
                
$sql="UPDATE `ldap_users` SET `keycode` = :keycode, `lastlogin` = :date WHERE `ldap_users`.`username` like :username ; ";
                
$stmt $dbh->prepare($sql);
                
$stmt->bindParam('username'$usernamePDO::PARAM_STR);
                
$stmt->bindParam('date'$datePDO::PARAM_STR);
                
$stmt->bindParam('keycode'$keycodePDO::PARAM_STR);

            }
                
            if (! 
$stmt->execute() ) echo "<b>Errore nella query.</b>";
            
$result $stmt->fetchAll();
            return 
$result;
        }catch (
PDOException $err) {
            print 
"<article> in function insertKey: <br>" $err->getMessage() . "</article>";
            return 
null;
        }
    }
    
    if (isset(
$_POST["login_btn"]))
    {
        if (!
checkIfKeySessionExsist($session_keyname) || !checkIfRecordExsist($_SESSION[$session_user]) )
        {
            
$user=$_POST["username"];
            
$pass=$_POST["password"];
            if (
loginLdap($user,$pass))
            {
                
// crea una chiave nel database
                // salva lo username su una variabile di sessione
                
$_SESSION[$session_user]=$user;
                
$_SESSION[$session_keyname]=genRandomStringFromUsername($user);
                
$_SESSION[$session_is_logged]="yes";
                
$key=genRandomStringFromUsername($user);
                
insertKey($user,$key);
                
            }else{
                
//non autenticato
                
echo  $htmlFormLogin;
                die();
            }
            
        }else{
            
//controlla se la variabile di sessione della chiave matcha con lo username sul database
            
if (!loginKey($_SESSION[$session_user],$_SESSION[$session_keyname]))
            {
                
loginErrorAction($login_error);
                
deleteUsername($_SESSION[$session_user]);
                
            }
        }
    
    }else{
        
        
//di nuovo un controllo
        /*if(!checkIfKeySessionExsist($_SESSION[$session_keyname]))
        {
            echo  $htmlFormLogin;
            die();
    
        }*/

        
if (!loginKey($_SESSION[$session_user],$_SESSION[$session_keyname]))
        {
            
#loginErrorAction($login_error);
            
echo  $htmlFormLogin;
            die();
        }

    }
?>

Powered by Code, a simple repository browser by Fabio Di Matteo