Gestion sha256 + Gestion 'hashChain' pour le 'token de synchronisation' des machines + Correction des 'view' : 'machines' et 'users'
This commit is contained in:
parent
e3a459200f
commit
ff314a4950
|
@ -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"],
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
"getByCode",
|
"getByCode",
|
||||||
"getByName",
|
"getByName",
|
||||||
|
|
||||||
|
"checkToken",
|
||||||
|
|
||||||
"search",
|
"search",
|
||||||
|
|
||||||
"getClusters"
|
"getClusters"
|
||||||
|
|
|
@ -23,6 +23,13 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] Gestion des authentifications et des droits
|
||||||
|
=========================================================*/
|
||||||
|
\manager\Authentification::check();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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':
|
||||||
|
|
|
@ -74,10 +74,4 @@
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
\manager\sessionManager::session_start();
|
\manager\sessionManager::session_start();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Gestion des authentifications et des droits
|
|
||||||
=========================================================*/
|
|
||||||
\manager\Authentification::check();
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -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 )
|
||||||
|
|
|
@ -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()
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 = [
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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@#((%*_$%(@#') );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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) );
|
||||||
|
|
|
@ -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) );
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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']."'>";
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue