\[..|{@#))'.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) Initialisation des permissions */ if( !isset($GLOBALS['PERM']) ) $GLOBALS['PERM'] = []; /* (1) Gestion de AUTH (authentification) dans HEADER ---------------------------------------------------------*/ define('__TOKEN__', isset($_SERVER['PHP_AUTH_DIGEST']) ? $_SERVER['PHP_AUTH_DIGEST'] : '' ); /* (2) Gestion de AUTH en fonction du token ---------------------------------------------------------*/ define('__TOKEN__', preg_match('/^[a-f0-9]{64}$/', __TOKEN__, $match) ? $match[0] : null ); /* (3) On vérifie l'authentification par BDD ---------------------------------------------------------*/ if( !self::deepCheck() ) define('__TOKEN__', 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/chs/hash', 'cycle' => __BUILD__.'/api/chs/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) Compares content */ if( __TOKEN__ !== self::secure_hash($fc['hash'], intval($fc['cycle'])) ) return false; /* (4) Stores new content */ file_put_contents($fn['hash'], __TOKEN__); file_put_contents($fn['cycle'], intval($fc['cycle'])-1); /* (5) Stores permission */ if( !in_array('cyclic-hash-system', $GLOBALS['PERM']) ) $GLOBALS['PERM'][] = 'cyclic-hash-system'; /* [3] Returns true if no error =========================================================*/ 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){ /* [1] Mise à jour de l'authentification =========================================================*/ self::check(); /* [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, $GLOBALS['PERM']) ) return Error::PermissionError; /* [3] 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_null(__AUTH_) ? 0 : 1; } } ?>