169 lines
4.2 KiB
PHP
169 lines
4.2 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace api\core;
|
||
|
|
||
|
use \database\core\Repo;
|
||
|
use \error\core\Error;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class Authentification{
|
||
|
|
||
|
// Contiendra les erreurs
|
||
|
public $error;
|
||
|
|
||
|
|
||
|
/*************************/
|
||
|
/* SECURE SHA1 ALGORITHM */
|
||
|
/*************************/
|
||
|
public static function secure_hash($data, $depth=1){
|
||
|
/* [1] On hash @depth times
|
||
|
=========================================================*/
|
||
|
$hash = $data;
|
||
|
$c = 0;
|
||
|
|
||
|
for( $h = 0 ; $h < $depth ; $h++ ){
|
||
|
$hash = hash('sha256', '">\[..|{@#))'.hash('sha256', $hash.'_)Q@#((%*_$%(@#') );
|
||
|
$c++;
|
||
|
}
|
||
|
|
||
|
|
||
|
/* [2] Return result
|
||
|
=========================================================*/
|
||
|
return $hash;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* INITIALISATION DU SYSTEME ET MISE A JOUR CONSTANTES D'AUTHENTIFICATION
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
public static function check(){
|
||
|
/* (1) Gestion de AUTH (authentification) dans HEADER
|
||
|
---------------------------------------------------------*/
|
||
|
define('__AUTH__', isset($_SERVER['PHP_AUTH_DIGEST']) ? $_SERVER['PHP_AUTH_DIGEST'] : '' );
|
||
|
|
||
|
/* (2) Gestion de AUTH en fonction du token
|
||
|
---------------------------------------------------------*/
|
||
|
$define('__AUTH__', preg_match('/^[a-f0-9]{64}$/', __AUTH__, $match) ? [$match[0]] : [] );
|
||
|
|
||
|
/* (3) On vérifie l'authentification par BDD
|
||
|
---------------------------------------------------------*/
|
||
|
if( !self::deepCheck() )
|
||
|
define('__AUTH__', null);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* VERIFICATION DE L'AUTHENTIFICATION
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
public static function deepCheck(){
|
||
|
/* [1] Si aucune authentification
|
||
|
=========================================================*/
|
||
|
if( self::auth() == 0 )
|
||
|
return false;
|
||
|
|
||
|
|
||
|
/* [2] Vérification de l'authentification
|
||
|
=========================================================*/
|
||
|
/* (1) Fetch cyclic-hashing-system -> check files */
|
||
|
$fn = [
|
||
|
'hash' => __BUILD__.'/api/hcs/hash',
|
||
|
'cycle' => __BUILD__.'/api/hcs/cycle'
|
||
|
];
|
||
|
|
||
|
if( !is_file($fn['hash']) || !is_file($fn['hash']) )
|
||
|
return false;
|
||
|
|
||
|
/* (2) Read files -> check contents */
|
||
|
$fc = [
|
||
|
'hash' => file_get_contents($fn['hash']),
|
||
|
'cycle' => file_get_contents($fn['cycle'])
|
||
|
];
|
||
|
|
||
|
if( strlen($fc['hash']) !== 64 || !is_numeric($fc['cycle']) )
|
||
|
return false;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* [3] Si pas d'erreur d'authentification, on retourne TRUE
|
||
|
=========================================================*/
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* VERIFICATION DES ACCES EN FONCTION DE PERMISSIONS ATTENDUES
|
||
|
*
|
||
|
* @module<String> Module concerné
|
||
|
* @expected<array> Liste des permissions attendues
|
||
|
*
|
||
|
* @return status<Boolean> Si FALSE, pas la permission, sinon si
|
||
|
*
|
||
|
*/
|
||
|
public static function permission($module, $expected){
|
||
|
/* [0] Mise à jour de l'authentification
|
||
|
=========================================================*/
|
||
|
// self::check();
|
||
|
|
||
|
|
||
|
/* [1] Gestion de l'AUTH (authentification)
|
||
|
=========================================================*/
|
||
|
|
||
|
|
||
|
|
||
|
/* [2] Gestion des permissions
|
||
|
=========================================================*/
|
||
|
/* (1) Vérification de toutes les permissions requises */
|
||
|
foreach($expected as $permission)
|
||
|
// Si il manque au minimum une permission, on retourne FALSE
|
||
|
if( !in_array($permission, $_SESSION['PERM']) )
|
||
|
return Error::PermissionError;
|
||
|
|
||
|
|
||
|
/* [3] Vérification que le module est actif pour l'entrepot
|
||
|
=========================================================*/
|
||
|
|
||
|
/* (1) On vérifie que le module est actif dans l'entrepot */
|
||
|
$allowedModule = isset($_SESSION['WAREHOUSE']['modules'])
|
||
|
&& is_array($_SESSION['WAREHOUSE']['modules'])
|
||
|
&& in_array($module, $_SESSION['WAREHOUSE']['modules']);
|
||
|
|
||
|
/* (2) On vérifie si le module est un module "Default" */
|
||
|
$defaultModule = preg_match('/^(\w+)Default$/', $module);
|
||
|
|
||
|
/* (3) Si aucune autorisation et pas module "Default" */
|
||
|
if( !$allowedModule && !$defaultModule )
|
||
|
return Error::DisabledModule;
|
||
|
|
||
|
|
||
|
/* [4] Si on a toutes les permissions requises
|
||
|
=========================================================*/
|
||
|
return Error::Success;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* RENVOIE LE NIVEAU D'AUTHENTIFICATION
|
||
|
*
|
||
|
* @return auth<int> Niveau d'authentification (0 à 2)
|
||
|
*
|
||
|
*/
|
||
|
public static function auth(){
|
||
|
return !is_array(__AUTH_) ? 0 : count(__AUTH_);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
?>
|