\[..|{@#))'.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 variables ---------------------------------------------------------*/ /* (1) Token de header */ if( !isset($GLOBALS['TOKEN']) ) $GLOBALS['TOKEN'] = null; /* (1) Liste des permissions */ if( !isset($GLOBALS['PERM']) ) $GLOBALS['PERM'] = []; /* (2) Gestion de AUTH (authentification) dans HEADER ---------------------------------------------------------*/ $GLOBALS['TOKEN'] = isset($_SERVER['PHP_AUTH_DIGEST']) ? $_SERVER['PHP_AUTH_DIGEST'] : ''; /* (3) Gestion de AUTH en fonction du token ---------------------------------------------------------*/ if( preg_match('/^[a-f0-9]{64}$/', $GLOBALS['TOKEN'], $match) ) $GLOBALS['TOKEN'] = $match[0]; else $GLOBALS['TOKEN'] = null; /* (4) On vérifie l'authentification par BDD ---------------------------------------------------------*/ if( !self::deepCheck() ) $GLOBALS['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 file */ $fn = __BUILD__.'/api/chs/hash'; if( !is_file($fn) ) return false; /* (2) Read file -> check content */ $fc = file_get_contents($fn); if( strlen($fc) !== 64 ) return false; /* (3) Compares content */ $hashed = self::secure_hash($fc); if( strlen($hashed) !== 64 || $GLOBALS['TOKEN'] !== $hashed ) return false; /* (4) Stores new content */ file_put_contents($fn, $GLOBALS['TOKEN']); /* (5) Stores permission */ if( !in_array('cyclic-hash', $GLOBALS['PERM']) ) $GLOBALS['PERM'][] = 'cyclic-hash'; /* [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] Setup =========================================================*/ /* (1) If no expected, return true */ if( !is_array($expected) || count($expected) === 0 ) return true; /* (2) Mise à jour de l'authentification */ self::check(); var_dump('expected'); var_dump($expected); var_dump('yours'); var_dump($GLOBALS['PERM']); /* [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($GLOBALS['TOKEN']) ? 0 : 1; } } ?>