SMMP/manager/Authentification.php

105 lines
2.5 KiB
PHP

<?php
namespace manager;
use \manager\Repo;
class Authentification{
// Constantes
public static $config_path = 'f/json/modules/auth';
// Contiendra les erreurs
public $error;
/* INITIALISATION DU SYSTEME ET MISE A JOUR CONSTANTES D'AUTHENTIFICATION
*
*
*/
public static function init(){
/* (1) Initialisation
---------------------------------------------------------*/
if( !isset($_SESSION['AUTH']) ) $_SESSION['AUTH'] = [];
if( !isset($_SESSION['PERM']) ) $_SESSION['PERM'] = [];
/* (2) Gestion de AUTH (authentification)
---------------------------------------------------------*/
/* (1) Si Auth dans HEADER, on le récupère */
$AUTH = isset($_SERVER['PHP_AUTH_DIGEST']) ? $_SERVER['PHP_AUTH_DIGEST'] : '';
/* (2) Si Auth dans SESSION, on le récupère */
if( $AUTH == '' && isset($_SESSION['AUTH']) )
$AUTH = implode('', $_SESSION['AUTH']);
/* (3) Gestion de AUTH en fonction des tokens
---------------------------------------------------------*/
/* (1) Double authentification */
if( preg_match('/^([a-f0-9]{40})([a-f0-9]{40})$/', $AUTH, $match) )
$_SESSION['AUTH'] = [ $match[1], $match[2] ];
/* (2) Authentification unique */
else if( preg_match('/^[a-f0-9]{40}$/', $AUTH, $match) )
$_SESSION['AUTH'] = [ $match[0] ];
/* (3) Aucune authentification */
else
$_SESSION['AUTH'] = [];
/* (4) On vérifie l'authentification par BDD
---------------------------------------------------------*/
if( !self::check() )
$_SESSION['AUTH'] = [];
}
/* VERIFICATION DE L'AUTHENTIFICATION
*
*
*/
public static function check(){
/* [1] Si aucune authentification
=========================================================*/
if( authLevel() == 0 )
return false;
/* [2] Si authentification unique
=========================================================*/
if( authLevel() >= 1 ){
$checkRoot = new Repo('warehouse/getByToken', [ $_SESSION['AUTH'][0] ]);
// Si le token n'existe pas
if( count($checkRoot->answer()) < 1 )
return false;
}
/* [3] Si authentification double
=========================================================*/
if( authLevel() >= 2 ){
$checkBranch = new Repo('admin/getByToken', [ $_SESSION['AUTH'][1] ]);
// Si le token n'existe pas
if( count($checkBranch->answer()) < 1 )
return false;
}
/* [4] Si pas d'erreur d'authentification, on retourne TRUE
=========================================================*/
return true;
}
}
?>