Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 37
Authentification
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 7
306
0.00% covered (danger)
0.00%
0 / 37
 __construct
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 authentification
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 8
 deconnection
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 createSecureSession
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 7
 destroySecureSession
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 checkUser
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 12
 getCurrentUser
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
<?php
class Authentification{
    private $users;
    public function __construct(){
        $this->users = json_decode(file_get_contents($GLOBALS['managers_dir'].DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'users.json'),true);
    }
    /**
     * méthode d'authentification, utilise param['identifiant'] et param['mdp'] et les comparent à
     * nos utilisateurs enregistrés puis créer une session securisée par token
     * @param  array $param contiens les infomations de connection
     * @return json         json contenant le résultat de l'authentification (true si authentification correcte, sinon non)
     */
    public function authentification($user,$mdp){
        foreach($this->users as $utilisateur=>$infos){
            if($utilisateur == $user and $infos['password'] == $mdp){
                $this->createSecureSession($user,$infos['role']);
                return true;
            }
        }
        return false;
    }
    /**
     * déconnecte l'utilisateur en détruisant la session et le cookie
     * @return  json renvoie true, il n'y aucune raison que ça foire
     */
    public function deconnection(){
        $this->destroySecureSession();
        Response::quickResponse(200,json_encode(['result' => true]));
    }
    /**
     * créer une session sécurisé , protégé du vol de session par identification de l'utilisateur par navigateur/ip/cookie
     * @param  String $user nom d'utilisateur
     * @param  String $role role de l'utilisateur (0=administrateur, 1= prof, 2=scolarité,3=élève)
     * @return void
     */
    private function createSecureSession($user,$role){
        $id = uniqid();
        $_SESSION['id'] = $id;
        $_SESSION['token'] = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$id);
        session_regenerate_id();
        $_SESSION['user'] = $user;
        $_SESSION['role'] = $role;
    }
    /**
     * Détruit une session
     * @return void
     */
    private function destroySecureSession(){
        session_destroy();
        setcookie('token',time()-1);
    }
    /**
     * Vérifie qu'un utilisateur donné a les droits demandés (passés en paramètres)
     * @param  int $role   role minimum
     * @param  boolean $strict si strict vaut true, seul les utilisateurs avec le role précis seront acceptés, sinon tout les utilisateurs
     * avec un role superieur le seront
     * @return boolean
     */
    public static function checkUser($role, $strict=false){
        if(isset($_SESSION['token'])){
            foreach($_SESSION['role'] as $roleUser){
                if(($strict and $roleUser == $role) or (!$strict and  $roleUser<= $role)){
                    if($_SESSION['token'] == sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SESSION['id'])){
                        session_regenerate_id();
                        return true;
                    };
                }
            }
        }
        return false;
    }
    public static function getCurrentUser(){
        return $_SESSION['user'];
    }
}
?>