From f89c530634cbfd8e7210199448d5843c5b17ef74 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 4 Jul 2016 11:04:49 +0200 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20du=20manager=20'Authentificatio?= =?UTF-8?q?n'=20et=20gestion=20de=20l'authentification,=20v=C3=A9rificatio?= =?UTF-8?q?n=20via=20REPO=20=C3=A0=20faire,=20et=20toute=20la=20gestion=20?= =?UTF-8?q?des=20droits=20aussi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/modules.json | 22 +++++++ index.php | 124 +++++++++++++++++++++-------------- manager/Authentification.php | 84 ++++++++++++++++++++++++ manager/autoloader.php | 15 +++-- test/authTest.php | 9 +++ test/automate.php | 6 +- 6 files changed, 203 insertions(+), 57 deletions(-) create mode 100644 manager/Authentification.php create mode 100644 test/authTest.php diff --git a/config/modules.json b/config/modules.json index 0d3dbc2..2fb0fe3 100755 --- a/config/modules.json +++ b/config/modules.json @@ -40,6 +40,28 @@ } }, + "authentificationDefault": { + "root": { + "description": "Connexion de premier niveau : token", + "permissions": [], + "parameters": { + "name": { "description": "Nom de l'entrepot.", "type": "varchar(3,30,alphanumeric)" }, + "password": { "description": "Mot de passe de l'entrepot.", "type": "text" } + }, + "output": {} + + }, + + "branch": { + "description": "Connexion de second niveau : administrateur", + "permissions": [], + "parameters": { + "name": { "description": "Identifiant de l'administrateur.", "type": "varchar(1,30,alphanumeric)" }, + "password": { "description": "Mot de passe de l'administrateur'.", "type": "text" } + }, + "output": {} + } + }, "download": { diff --git a/index.php b/index.php index 499cb2a..5f8841f 100755 --- a/index.php +++ b/index.php @@ -8,6 +8,7 @@ use \manager\ModuleRequest; use \manager\ModuleResponse; use \manager\ManagerError; + use \manager\Authentification; /*******************************************/ @@ -15,56 +16,83 @@ /*******************************************/ debug(); /*******************************************/ - - $_SESSION['permission'] = array(); - - - /* [0] On initialise le routeur - ===================================================*/ - $R = new Router( $_GET['url'] ); - // var_dump($R); - - /* [1] On cree les regles de routage - ===================================================*/ - // Racine -> page d'accueil - $R->get('/?', function(){ header('Location: /dashboard/'); }); - - // Liste des pages du site - $page_list = array( - 'dashboard', - 'profile', - 'machines', - 'users', - 'groups', - 'analytics', - 'settings' - ); - - // nomPage/arg1/arg2 -> inclusion de la page - $R->get('(?:'.implode('|', $page_list).')(?:/[\w-]+)*/?', function(){ include __ROOT__.'/view.php'; }); - - // Dispatcher - $R->get('f(?:/([\w-]+))*/?', function(){ new ResourceDispatcher($_GET['url'], true); }); - - // Api - $R->post('api(?:/(.*))?', function($url){ - $request = ModuleRequest::fromPost($url, $_POST); - $answer = $request->dispatch(); - - // Si c'est une réponse (et non un download) - if( $answer instanceof ModuleResponse ) - echo $answer->serialize(); - }); - - - // N'importe -> page d'accueil - $R->get('.+', function(){ header('Location: /dashboard/'); }); - $R->post('.+', function(){ header('Location: /dashboard/'); }); + /* DEBUGGER */ + /*******************************************/ - /* [2] On lance le routeur - ===================================================*/ - $R->run(); + + + + + + + + + + /* [1] Gestion de l'authentification + =========================================================*/ + + + + + + + + + + + /* [2] Gestion du routage + =========================================================*/ + + /* (1) On initialise le routeur + ---------------------------------------------------------*/ + $R = new Router( $_GET['url'] ); + + + /* (2) On cree les regles de routage + ---------------------------------------------------------*/ + /* (1) Racine -> page d'accueil */ + $R->get('/?', function(){ header('Location: /dashboard/'); }); + + /* (2) Liste des pages du site */ + $page_list = array( + 'dashboard', + 'profile', + 'machines', + 'users', + 'groups', + 'analytics', + 'settings' + ); + + // nomPage/arg1/arg2 -> inclusion de la page + $R->get('(?:'.implode('|', $page_list).')(?:/[\w-]+)*/?', function(){ include __ROOT__.'/view.php'; }); + + + /* (3) Dispatcher */ + $R->get('f(?:/([\w-]+))*/?', function(){ new ResourceDispatcher($_GET['url'], true); }); + + + /* (4) api/module/method -> Api */ + $R->post('api(?:/(.*))?', function($url){ + $request = ModuleRequest::fromPost($url, $_POST); + $answer = $request->dispatch(); + + // Si c'est une réponse (et non un download) + if( $answer instanceof ModuleResponse ) + echo $answer->serialize(); + }); + + + /* (5) N'importe -> page d'accueil */ + $R->get('.+', function(){ header('Location: /dashboard/'); }); + $R->post('.+', function(){ header('Location: /dashboard/'); }); + + + + /* (3) On lance le routeur + ---------------------------------------------------------*/ + $R->run(); ?> diff --git a/manager/Authentification.php b/manager/Authentification.php new file mode 100644 index 0000000..2b0b931 --- /dev/null +++ b/manager/Authentification.php @@ -0,0 +1,84 @@ + diff --git a/manager/autoloader.php b/manager/autoloader.php index 79bd249..e7db5ee 100755 --- a/manager/autoloader.php +++ b/manager/autoloader.php @@ -8,7 +8,7 @@ /* [1] On définit __SERVER_HOST__ et __SERVER_ROOT__ si c'est pas déja fait =========================================================*/ - if( !defined('__SERVER_HOST__') || !defined('__SERVER_ROOT') ){ + if( !defined('__SERVER_HOST__') || !defined('__SERVER_ROOT__') ){ /* (1) On charge le fichier de configuration */ $json = json_decode( file_get_contents(__ROOT__.'/config/server.json'), true ); @@ -74,14 +74,19 @@ =========================================================*/ \manager\sessionManager::session_start(); - - /* [3] Gestion des droits des utilisateurs + + /* [3] Gestion des authentifications et des droits =========================================================*/ + \manager\Authentification::init(); + + /* (0) Retourne le niveau de connexion */ + function authLevel(){ return !is_array($_SESSION['AUTH']) ? 0 : count($_SESSION['AUTH']); } + /* (1) Retourne si l'utilisateur est connecte ou non */ - function connected(){ return isset($_SESSION['permission']) && count($_SESSION['permission']) > 0; } + function connected(){ return isset($_SESSION['PERM']) && count($_SESSION['PERM']) > 0; } /* (2) Retourne si l'utilisateur a le status en question */ - function permission($type){ return connected() && in_array($type, $_SESSION['permission']); } + function permission($type){ return connected() && in_array($type, $_SESSION['PERM']); } ?> diff --git a/test/authTest.php b/test/authTest.php new file mode 100644 index 0000000..9f45a22 --- /dev/null +++ b/test/authTest.php @@ -0,0 +1,9 @@ + diff --git a/test/automate.php b/test/automate.php index 1f68c30..a2eccc2 100755 --- a/test/automate.php +++ b/test/automate.php @@ -13,7 +13,7 @@ - /* NSERTION DES UTILISATEURS DANS LA BDD DEPUIS JSON + /* INSERTION DES UTILISATEURS DANS LA BDD DEPUIS JSON * * * @return status TRUE si aucune erreur, sinon FALSE @@ -309,9 +309,7 @@ - var_dump( Database::check('varchar(3,5)', "blabl") ); - var_dump( Database::check('varchar(3,5)', "bla -") ); - var_dump( Database::check('varchar(3,5,subtest,subsub)', "blabl") ); + ?>