Gestion sha256 + Gestion 'hashChain' pour le 'token de synchronisation' des machines + Correction des 'view' : 'machines' et 'users'

This commit is contained in:
xdrm-brackets 2016-07-07 17:59:31 +02:00
parent e3a459200f
commit ff314a4950
18 changed files with 131 additions and 34 deletions

View File

@ -223,6 +223,19 @@
"machineDefault": { "machineDefault": {
"sync": {
"description": "Synchronisation d'une machine.",
"permissions": [],
"parameters": {
"token": { "description": "Code d'accès évolutif dynamique.", "type": "hash" },
"data": { "description": "Données (dépendent des modules).", "type": "array<mixed>" }
},
"output": {
"data": { "description": "Données (dépendent des modules).", "type": "array<mixed>" }
}
},
"create": { "create": {
"description": "Création d'une nouvelle machine.", "description": "Création d'une nouvelle machine.",
"permissions": ["warehouse", "admin"], "permissions": ["warehouse", "admin"],

View File

@ -25,6 +25,8 @@
"getByCode", "getByCode",
"getByName", "getByName",
"checkToken",
"search", "search",
"getClusters" "getClusters"

View File

@ -23,6 +23,13 @@
/* [3] Gestion des authentifications et des droits
=========================================================*/
\manager\Authentification::check();

View File

@ -44,11 +44,11 @@
/* (3) Gestion de AUTH en fonction des tokens /* (3) Gestion de AUTH en fonction des tokens
---------------------------------------------------------*/ ---------------------------------------------------------*/
/* (1) Double authentification */ /* (1) Double authentification */
if( preg_match('/^([a-f0-9]{40})([a-f0-9]{40})$/', $AUTH, $match) ) if( preg_match('/^([a-f0-9]{64})([a-f0-9]{64})$/', $AUTH, $match) )
$_SESSION['AUTH'] = [ $match[1], $match[2] ]; $_SESSION['AUTH'] = [ $match[1], $match[2] ];
/* (2) Authentification unique */ /* (2) Authentification unique */
else if( preg_match('/^[a-f0-9]{40}$/', $AUTH, $match) ) else if( preg_match('/^[a-f0-9]{64}$/', $AUTH, $match) )
$_SESSION['AUTH'] = [ $match[0] ]; $_SESSION['AUTH'] = [ $match[0] ];
/* (3) Aucune authentification */ /* (3) Aucune authentification */
@ -143,7 +143,7 @@
public static function permission($expected){ public static function permission($expected){
/* [0] Mise à jour de l'authentification /* [0] Mise à jour de l'authentification
=========================================================*/ =========================================================*/
self::check(); // self::check();
/* [1] Gestion de l'AUTH (authentification) /* [1] Gestion de l'AUTH (authentification)

View File

@ -97,7 +97,7 @@
// Hash sha1/md5 // Hash sha1/md5
case 'hash': case 'hash':
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value); return $checker && is_string($value) && preg_match('/^[\da-f]+$/i', $value) && (strlen($value) == 40 || strlen($value) == 64);
break; break;
case 'alphanumeric': case 'alphanumeric':

View File

@ -74,10 +74,4 @@
=========================================================*/ =========================================================*/
\manager\sessionManager::session_start(); \manager\sessionManager::session_start();
/* [3] Gestion des authentifications et des droits
=========================================================*/
\manager\Authentification::check();
?> ?>

View File

@ -34,7 +34,7 @@
/* [2] On vérifie le mot de passe /* [2] On vérifie le mot de passe
=========================================================*/ =========================================================*/
$hash_password = sessionManager::secure_sha1($password); $hash_password = sessionManager::secure_hash($password);
// Si mot de passe faux, on retourne une erreur // Si mot de passe faux, on retourne une erreur
if( $nameFetched[0]['password'] != $hash_password ) if( $nameFetched[0]['password'] != $hash_password )
@ -80,7 +80,7 @@
/* [2] On vérifie le mot de passe /* [2] On vérifie le mot de passe
=========================================================*/ =========================================================*/
$hash_password = sessionManager::secure_sha1($password); $hash_password = sessionManager::secure_hash($password);
// Si mot de passe faux, on retourne une erreur // Si mot de passe faux, on retourne une erreur
if( $usernameFetched[0]['password'] != $hash_password ) if( $usernameFetched[0]['password'] != $hash_password )

View File

@ -372,6 +372,28 @@
/* SYNCHRONISE UNE MACHINE
*
* @token<String> Token de synchronisation de la machine
* @data<Array> Données de la synchronisation
*
* @return data<Array> Données de retour de synchronisation
*
*/
public static function sync($params){
extract($params);
$checkToken = new Repo('machine/checkToken', [$token]);
return [
'tokenResult' => $checkToken->answer()
];
}
} }

View File

@ -28,7 +28,7 @@
/* [1] Normalisation + verification des donnees /* [1] Normalisation + verification des donnees
=========================================================*/ =========================================================*/
$password_hash = sessionManager::secure_sha1($password); $password_hash = sessionManager::secure_hash($password);
/* [2] Creation de l'utilisateur /* [2] Creation de l'utilisateur
=========================================================*/ =========================================================*/
@ -343,7 +343,7 @@
/* [2] Normalisation + verification des donnees /* [2] Normalisation + verification des donnees
=========================================================*/ =========================================================*/
$password_hash = sessionManager::secure_sha1($password); $password_hash = sessionManager::secure_hash($password);
/* (1) Verification des parametres (si non nul + differents)*/ /* (1) Verification des parametres (si non nul + differents)*/
$diff_param = [ $diff_param = [

View File

@ -37,8 +37,8 @@
$insert_admin->execute([ $insert_admin->execute([
':username' => $username, ':username' => $username,
':mail' => $mail, ':mail' => $mail,
':password' => sessionManager::secure_sha1( $password ), ':password' => sessionManager::secure_hash( $password ),
':token' => sessionManager::secure_sha1( uniqid() ) ':token' => sessionManager::secure_hash( uniqid() )
]); ]);
@ -79,7 +79,7 @@
/* [2] On met à jour le token /* [2] On met à jour le token
=========================================================*/ =========================================================*/
/* (1) On crée un nouveau token */ /* (1) On crée un nouveau token */
$new_token = sessionManager::secure_sha1( uniqid() ); $new_token = sessionManager::secure_hash( uniqid() );
/* (2) On applique le nouveau token */ /* (2) On applique le nouveau token */
$update_token = Database::getPDO()->prepare("UPDATE admin $update_token = Database::getPDO()->prepare("UPDATE admin

View File

@ -2,6 +2,7 @@
namespace manager\repo; namespace manager\repo;
use \manager\Database; use \manager\Database;
use \manager\sessionManager;
use \manager\repo\cluster as clusterRepo; use \manager\repo\cluster as clusterRepo;
class machine extends parentRepo{ class machine extends parentRepo{
@ -66,7 +67,7 @@
*/ */
public static function search($id_warehouse, $keyword){ public static function search($id_warehouse, $keyword){
// On recupere les donnees // On recupere les donnees
$searchmachines = Database::getPDO()->prepare("SELECT * FROM machine $searchmachines = Database::getPDO()->prepare("SELECT id_machine, code, name FROM machine
WHERE id_warehouse = :id_warehouse WHERE id_warehouse = :id_warehouse
AND ( code LIKE '%".$keyword."%' AND ( code LIKE '%".$keyword."%'
OR name LIKE '%".$keyword."%' OR name LIKE '%".$keyword."%'
@ -359,6 +360,47 @@
/* VERIFIE MET A JOUR LE TOKEN DE SYNCHRONISATION
*
* @token<String> Nouveau token de synchronisation
*
* @return status<Boolean> VRAI si le token est correct, sinon FALSE
*
*/
public static function checkToken($token){
/* [1] On vérifie le token
=========================================================*/
$hash = sessionManager::secure_hash($token);
$byToken = self::getByToken($hash);
// Si aucun résultat, erreur
if( count($byToken) < 1 )
return false;
/* [2] On met à jour le token
=========================================================*/
$updateToken = Database::getPDO()->prepare("UPDATE machine
SET token = :token
WHERE id_machine = :id_machine");
$updateToken->execute([
':token' => $token,
':id_machine' => $byToken[0]['id_machine']
]);
/* [3] On retourne que tout s'est bien déroulé
=========================================================*/
return true;
}
} }

View File

@ -33,8 +33,8 @@
VALUES(DEFAULT, :name, :password, :token)"); VALUES(DEFAULT, :name, :password, :token)");
$insert_warehouse->execute([ $insert_warehouse->execute([
':name' => $name, ':name' => $name,
':password' => sessionManager::secure_sha1( $password ), ':password' => sessionManager::secure_hash( $password ),
':token' => sessionManager::secure_sha1( uniqid() ) ':token' => sessionManager::secure_hash( uniqid() )
]); ]);
/* [3] On retourne l'id_warehouse ou FALSE si erreur /* [3] On retourne l'id_warehouse ou FALSE si erreur
@ -74,7 +74,7 @@
/* [2] On met à jour le token /* [2] On met à jour le token
=========================================================*/ =========================================================*/
/* (1) On crée un nouveau token */ /* (1) On crée un nouveau token */
$new_token = sessionManager::secure_sha1( uniqid() ); $new_token = sessionManager::secure_hash( uniqid() );
/* (2) On applique le nouveau token */ /* (2) On applique le nouveau token */
$update_token = Database::getPDO()->prepare("UPDATE warehouse $update_token = Database::getPDO()->prepare("UPDATE warehouse

View File

@ -11,8 +11,8 @@
/*************************/ /*************************/
/* SECURE SHA1 ALGORITHM */ /* SECURE SHA1 ALGORITHM */
/*************************/ /*************************/
public static function secure_sha1($data){ public static function secure_hash($data){
return sha1( '">\[..|{@#))'.sha1($data.'_)Q@#((%*_$%(@#') ); return hash('sha256', '">\[..|{@#))'.hash('sha256', $data.'_)Q@#((%*_$%(@#') );
} }

View File

@ -185,7 +185,7 @@
/* [5] Mot de passe /* [5] Mot de passe
=========================================================*/ =========================================================*/
public function testPasswordSizeEqCorrect(){ public function testPasswordSizeEqCorrect(){
$password_hash = \manager\sessionManager::secure_sha1('monmotdepasse'); $password_hash = \manager\sessionManager::secure_hash('monmotdepasse');
$this->assertEquals( 40, strlen($password_hash) ); $this->assertEquals( 40, strlen($password_hash) );
$this->assertTrue( \manager\Checker::run('user.password', $password_hash) ); $this->assertTrue( \manager\Checker::run('user.password', $password_hash) );
@ -199,7 +199,7 @@
} }
public function testPasswordSizeSupIncorrect(){ public function testPasswordSizeSupIncorrect(){
$password_hash = \manager\sessionManager::secure_sha1('monmotdepasse').'a'; $password_hash = \manager\sessionManager::secure_hash('monmotdepasse').'a';
$this->assertGreaterThan( 40, strlen($password_hash) ); $this->assertGreaterThan( 40, strlen($password_hash) );
$this->assertFalse( \manager\Checker::run('user.password', $password_hash) ); $this->assertFalse( \manager\Checker::run('user.password', $password_hash) );

View File

@ -7,7 +7,7 @@
=========================================================*/ =========================================================*/
public function testSecureSHA1(){ public function testSecureSHA1(){
$plain = 'montexteclair'; $plain = 'montexteclair';
$hash = \manager\sessionManager::secure_sha1($plain); $hash = \manager\sessionManager::secure_hash($plain);
// Verification desuiee // Verification desuiee
$this->assertEquals(40, strlen($hash) ); $this->assertEquals(40, strlen($hash) );

View File

@ -6,18 +6,19 @@
$hash = 'mySecretKey'; $hash = 'password';
$hashes = []; $hashes = [];
for( $i = 0 ; $i < 1000 ; $i++ ){ for( $i = 0 ; $i < 1000 ; $i++ ){
$hash = sessionManager::secure_sha1($hash); $hash = sessionManager::secure_hash($hash);
if( in_array($hash, $hashes) ) if( isset($hashes[$hash]) )
var_dump('already'); var_dump('already');
$hashes[] = $hash; $hashes[$hash] = null;
var_dump($hash);
} }

View File

@ -70,8 +70,16 @@
// Liste des machines // Liste des machines
foreach( $answer->get('machines') as $machine){ foreach( $answer->get('machines') as $machine){
$clusters = new Repo('machine/getClusters', array($machine['id_machine']));
$clusters = $clusters->answer(); /* (1) On récupère les groupes de la machine */
$clustersReq = new ModuleRequest('machineDefault/getClusters', [
'id_machine' => $machine['id_machine']
]);
$clustersRes = $clustersReq->dispatch();
/* (2) Gestion si erreur */
if( $clustersRes->error == ManagerError::Success ) $clusters = $clustersRes->get('clusters');
else $clusters = [];
echo "<article class='inline-box' id='".$machine['id_machine']."'>"; echo "<article class='inline-box' id='".$machine['id_machine']."'>";
// Nom de la machine // Nom de la machine

View File

@ -72,8 +72,16 @@
// Liste des utilisateurs // Liste des utilisateurs
foreach( $answer->get('users') as $user){ foreach( $answer->get('users') as $user){
$clusters = new Repo('user/getClusters', [$user['id_user']]);
$clusters = $clusters->answer(); /* (1) On récupère les groupes de la machine */
$clustersReq = new ModuleRequest('userDefault/getClusters', [
'id_user' => $user['id_user']
]);
$clustersRes = $clustersReq->dispatch();
/* (2) Gestion si erreur */
if( $clustersRes->error == ManagerError::Success ) $clusters = $clustersRes->get('clusters');
else $clusters = [];
echo "<article class='inline-box' id='".$user['id_user']."'>"; echo "<article class='inline-box' id='".$user['id_user']."'>";