From fa98401683e37c3d7728cdfc3aa7923942527d97 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 6 Jul 2016 17:36:26 +0200 Subject: [PATCH] =?UTF-8?q?Gestion=20des=20connexions=20'entrepot'=20et=20?= =?UTF-8?q?'admin'=20et=20corrections=20des=20droits=20de=20'ModuleRequest?= =?UTF-8?q?'/'Authentification'=20et=20cr=C3=A9ation=20du=20module=20'auth?= =?UTF-8?q?entificationDefault'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/modules.json | 11 ++- manager/Authentification.php | 30 ++++-- manager/ModuleRequest.php | 37 +++++--- manager/Repo.php | 7 -- manager/module/authentificationDefault.php | 102 +++++++++++++++++++++ manager/repo/machine.php | 2 +- manager/repo/user.php | 2 +- test/authTest.php | 1 + test/automate.php | 7 +- 9 files changed, 158 insertions(+), 41 deletions(-) create mode 100644 manager/module/authentificationDefault.php diff --git a/config/modules.json b/config/modules.json index c1c54b3..54b8af7 100755 --- a/config/modules.json +++ b/config/modules.json @@ -64,22 +64,25 @@ "name": { "description": "Nom de l'entrepot.", "type": "varchar(3,30,alphanumeric)" }, "password": { "description": "Mot de passe de l'entrepot.", "type": "text" } }, - "output": {} + "output": { + "status": { "description": "Status de la connexion.", "type": "boolean" } + } }, "admin": { "description": "Connexion de second niveau : administrateur.", "permissions": ["warehouse"], "parameters": { - "name": { "description": "Identifiant de l'administrateur.", "type": "varchar(1,30,alphanumeric)" }, + "username": { "description": "Identifiant de l'administrateur.", "type": "varchar(1,30,alphanumeric)" }, "password": { "description": "Mot de passe de l'administrateur'.", "type": "text" } }, - "output": {} + "output": { + "status": { "description": "Status de la connexion.", "type": "boolean" } + } } }, - "userDefault": { "create": { diff --git a/manager/Authentification.php b/manager/Authentification.php index 85cf50b..3789def 100644 --- a/manager/Authentification.php +++ b/manager/Authentification.php @@ -25,8 +25,10 @@ public static function check(){ /* (1) Initialisation ---------------------------------------------------------*/ - if( !isset($_SESSION['AUTH']) ) $_SESSION['AUTH'] = []; - if( !isset($_SESSION['PERM']) ) $_SESSION['PERM'] = []; + if( !isset($_SESSION['AUTH']) ) $_SESSION['AUTH'] = []; + if( !isset($_SESSION['PERM']) ) $_SESSION['PERM'] = []; + if( !isset($_SESSION['WAREHOUSE']) ) $_SESSION['WAREHOUSE'] = []; + if( !isset($_SESSION['ADMIN']) ) $_SESSION['ADMIN'] = []; /* (2) Gestion de AUTH (authentification) @@ -50,14 +52,22 @@ $_SESSION['AUTH'] = [ $match[0] ]; /* (3) Aucune authentification */ - else - $_SESSION['AUTH'] = []; + else{ + $_SESSION['AUTH'] = []; + $_SESSION['PERM'] = []; + $_SESSION['WAREHOUSE'] = []; + $_SESSION['ADMIN'] = []; + } /* (4) On vérifie l'authentification par BDD ---------------------------------------------------------*/ - if( !self::deepCheck() ) - $_SESSION['AUTH'] = []; + if( !self::deepCheck() ){ + $_SESSION['AUTH'] = []; + $_SESSION['PERM'] = []; + $_SESSION['WAREHOUSE'] = []; + $_SESSION['ADMIN'] = []; + } } @@ -79,13 +89,13 @@ $checkRoot = new Repo('warehouse/getByToken', [ $_SESSION['AUTH'][0] ]); /* (1) Si le token n'existe pas, on retourne une erreur */ - if( count($checkRoot->answer()) < 1 ) + if( $checkRoot->answer() == false ) return false; /* (2) On met à jour les informations de l'entrepot */ $_SESSION['WAREHOUSE'] = [ - 'id' => (int) $checkRoot->answer()[0]['id_warehouse'], - 'name' => $checkRoot->answer()[0]['name'] + 'id' => (int) $checkRoot->answer()[0]['id_warehouse'], + 'name' => $checkRoot->answer()[0]['name'] ]; /* (3) On récupère les modules de l'entrepot */ @@ -100,7 +110,7 @@ $checkBranch = new Repo('admin/getByToken', [ $_SESSION['AUTH'][1] ]); /* (1) Si le token n'existe pas, on retourne une erreur */ - if( count($checkBranch->answer()) < 1 ) + if( $checkBranch->answer() == false ) return false; /* (2) Si pas administrateur de l'entrepot, on retourne une erreur */ diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php index 80a90f8..cdfcb5f 100755 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -334,17 +334,7 @@ } - /* [3] On vérifie que le module est autorisé - =========================================================*/ - // Si le module n'est pas autorisé - // et qu'il ne finit pas par "Default" - if( !in_array($module, $_SESSION['WAREHOUSE']['modules']) && !preg_match('/^(\w+)Default$/', $module) ){ - $this->error = ManagerError::DisabledModule; - return false; // On retourne FALSE, si erreur - } - - - /* [4] Verification de l'existence de la methode (conf) + /* [3] Verification de l'existence de la methode (conf) =========================================================*/ if( array_key_exists($method, $this->modules[$module]) === false ){ // Si la methode n'est pas specifie dans la conf $this->error = ManagerError::UnknownMethod; @@ -353,7 +343,7 @@ - /* [5] Enregistrement du chemin et renvoi de SUCCESS + /* [4] Enregistrement du chemin et renvoi de SUCCESS =========================================================*/ $this->path = [ 'module' => $module, @@ -394,7 +384,28 @@ return false; } - /* (2) On retourne VRAI si la permission est ok */ + + /* [3] On vérifie que le module est autorisé + =========================================================*/ + $moduleName = $this->path['module']; + + /* (1) On vérifie que le module est actif dans l'entrepot */ + $allowedModule = isset($_SESSION['WAREHOUSE']['modules']) + && is_array($_SESSION['WAREHOUSE']['modules']) + && in_array($moduleName, $_SESSION['WAREHOUSE']['modules']); + + /* (2) On vérifie si le module est un module "Default" */ + $defaultModule = preg_match('/^(\w+)Default$/', $moduleName); + + /* (3) Si aucune autorisation et pas module "Default" */ + if( !$allowedModule && !$defaultModule ){ + $this->error = ManagerError::DisabledModule; + return false; // On retourne FALSE, si erreur + } + + + + /* On retourne VRAI si la permission est ok */ return true; } diff --git a/manager/Repo.php b/manager/Repo.php index 3744746..96fb506 100755 --- a/manager/Repo.php +++ b/manager/Repo.php @@ -47,13 +47,6 @@ */ public function __construct($path=null, $params=null){ - // Si pas authentifié, erreur - if( Authentification::auth() < 2 ){ - $this->error = ManagerError::PermissionError; - return false; - } - - // Si pas parametre manquant, on quitte if( $path == null ){ $this->error = ManagerError::MissingPath; diff --git a/manager/module/authentificationDefault.php b/manager/module/authentificationDefault.php new file mode 100644 index 0000000..d98d2db --- /dev/null +++ b/manager/module/authentificationDefault.php @@ -0,0 +1,102 @@ + Nom de l'entrepot + * @password Mot de passe de l'entrepot + * + * @return status TRUE si les crédits sont bons, sinon FALSE + * + */ + public static function warehouse($params){ + extract($params); + + /* [1] On recherche un entrepot avec ce nom + =========================================================*/ + $getName = new Repo('warehouse/getByName', [$name]); + + $nameFetched = $getName->answer(); + + // Si aucun résultat, on retourne une erreur + if( count($nameFetched) == 0 ) + return [ 'status' => false ]; + + + /* [2] On vérifie le mot de passe + =========================================================*/ + $hash_password = sessionManager::secure_sha1($password); + + // Si mot de passe faux, on retourne une erreur + if( $nameFetched[0]['password'] != $hash_password ) + return [ 'status' => false ]; + + + /* [3] On définit le token + =========================================================*/ + $_SESSION['AUTH'][0] = $nameFetched[0]['token']; + + // On retourne le status + return [ 'status' => true ]; + } + + + + + + + + + /* CONNEXION EN TANT QU'ADMINISTRATEUR + * + * @username Nom de l'administrateur + * @password Mot de passe de l'administrateur + * + * @return status TRUE si les crédits sont bons, sinon FALSE + * + */ + public static function admin($params){ + extract($params); + + /* [1] On recherche un entrepot avec ce nom + =========================================================*/ + $getUsername = new Repo('admin/getByUsername', [$username]); + + $usernameFetched = $getUsername->answer(); + + // Si aucun résultat, on retourne une erreur + if( count($usernameFetched) == 0 ) + return [ 'status' => false ]; + + + /* [2] On vérifie le mot de passe + =========================================================*/ + $hash_password = sessionManager::secure_sha1($password); + + // Si mot de passe faux, on retourne une erreur + if( $usernameFetched[0]['password'] != $hash_password ) + return [ 'status' => false ]; + + + /* [3] On définit le token + =========================================================*/ + $_SESSION['AUTH'][1] = $usernameFetched[0]['token']; + + + // On retourne le status + return [ 'status' => true ]; + } + + } + + +?> diff --git a/manager/repo/machine.php b/manager/repo/machine.php index fc90df1..28fa051 100755 --- a/manager/repo/machine.php +++ b/manager/repo/machine.php @@ -96,7 +96,7 @@ public static function getClusters($id_warehouse, $id_machine){ /* [1] On redige/execute la requete =========================================================*/ - $get_clusters = Database::getPDO()->prepare("SELECT c.* + $get_clusters = Database::getPDO()->prepare("SELECT c.id_cluster, c.name FROM cluster as c, cluster_merge as cm, machine as m WHERE cm.id_cluster = c.id_cluster AND cm.id_entity = m.id_machine diff --git a/manager/repo/user.php b/manager/repo/user.php index d6822cc..cc20543 100755 --- a/manager/repo/user.php +++ b/manager/repo/user.php @@ -110,7 +110,7 @@ public static function getClusters($id_warehouse, $id_user){ /* [1] On redige/execute la requete =========================================================*/ - $get_clusters = Database::getPDO()->prepare("SELECT c.* + $get_clusters = Database::getPDO()->prepare("SELECT c.id_cluster, c.name FROM cluster as c, cluster_merge as cm, user as u WHERE cm.id_cluster = c.id_cluster AND cm.id_entity = u.id_user diff --git a/test/authTest.php b/test/authTest.php index dfaa4d5..fcb5d58 100644 --- a/test/authTest.php +++ b/test/authTest.php @@ -2,6 +2,7 @@ require_once __ROOT__.'/manager/autoloader.php'; use \manager\Authentification; + use \manager\Repo; var_dump( Authentification::auth() ); diff --git a/test/automate.php b/test/automate.php index d903930..43a2f54 100755 --- a/test/automate.php +++ b/test/automate.php @@ -2,6 +2,7 @@ require_once __ROOT__.'/manager/autoloader.php'; use \manager\ModuleRequest; + use \manager\sessionManager; use \manager\ResourceDispatcher; use \manager\ManagerError; use \manager\Repo; @@ -322,11 +323,7 @@ $getAll = new Repo('admin/getAll'); - }createWarehouse(); - - - - + }//createWarehouse(); ?>