\[..|{@#))'.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 Module concerné * @expected Liste des permissions attendues * * @return status 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 Niveau d'authentification (0 à 2) * */ public static function auth(){ return !is_array(__AUTH_) ? 0 : count(__AUTH_); } } ?>