Création du manager 'Authentification' et gestion de l'authentification, vérification via REPO à faire, et toute la gestion des droits aussi

This commit is contained in:
xdrm-brackets 2016-07-04 11:04:49 +02:00
parent 009b174437
commit 692e8e508f
6 changed files with 203 additions and 57 deletions

View File

@ -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": { "download": {

124
index.php
View File

@ -8,6 +8,7 @@
use \manager\ModuleRequest; use \manager\ModuleRequest;
use \manager\ModuleResponse; use \manager\ModuleResponse;
use \manager\ManagerError; use \manager\ManagerError;
use \manager\Authentification;
/*******************************************/ /*******************************************/
@ -15,56 +16,83 @@
/*******************************************/ /*******************************************/
debug(); debug();
/*******************************************/ /*******************************************/
/* DEBUGGER */
$_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/'); });
/* [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();
?> ?>

View File

@ -0,0 +1,84 @@
<?php
namespace manager;
use \manager\Repo;
class Authentification{
// Constantes
public static $config_path = 'f/json/modules/auth';
// Contiendra les erreurs
public $error;
/* INITIALISATION DU SYSTEME ET MISE A JOUR CONSTANTES D'AUTHENTIFICATION
*
*
*/
public static function init(){
/* (1) Initialisation
---------------------------------------------------------*/
if( !isset($_SESSION['AUTH']) ) $_SESSION['AUTH'] = array();
if( !isset($_SESSION['PERM']) ) $_SESSION['PERM'] = array();
/* (2) Gestion de AUTH (authentification)
---------------------------------------------------------*/
/* (1) Si Auth dans HEADER, on le récupère */
$AUTH = isset($_SERVER['PHP_AUTH_DIGEST']) ? $_SERVER['PHP_AUTH_DIGEST'] : '';
/* (2) Si Auth dans SESSION, on le récupère */
if( $AUTH == '' && isset($_SESSION['AUTH']) )
$AUTH = implode('', $_SESSION['AUTH']);
/* (3) Gestion de AUTH en fonction des tokens
---------------------------------------------------------*/
/* (1) Double authentification */
if( preg_match('/^([a-f0-9]{40})([a-f0-9]{40})$/', $AUTH, $match) )
$_SESSION['AUTH'] = array( $match[1], $match[2] );
/* (2) Authentification unique */
else if( preg_match('/^[a-f0-9]{40}$/', $AUTH, $match) )
$_SESSION['AUTH'] = array( $match[0] );
/* (3) Aucune authentification */
else
$_SESSION['AUTH'] = array();
/* (4) On retourne le niveau d'authentification
---------------------------------------------------------*/
return authLevel();
}
/* VERIFICATION DE L'AUTHENTIFICATION
*
*
*/
public static function check(){
/* [1] Si aucune authentification
=========================================================*/
/* [2] Si authentification unique
=========================================================*/
/* [3] Si authentification double
=========================================================*/
}
}
?>

View File

@ -8,7 +8,7 @@
/* [1] On définit __SERVER_HOST__ et __SERVER_ROOT__ si c'est pas déja fait /* [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 */ /* (1) On charge le fichier de configuration */
$json = json_decode( file_get_contents(__ROOT__.'/config/server.json'), true ); $json = json_decode( file_get_contents(__ROOT__.'/config/server.json'), true );
@ -74,14 +74,19 @@
=========================================================*/ =========================================================*/
\manager\sessionManager::session_start(); \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 */ /* (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 */ /* (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']); }
?> ?>

9
test/authTest.php Normal file
View File

@ -0,0 +1,9 @@
<?php define('__ROOT__', dirname(dirname(__FILE__)) );
require_once __ROOT__.'/manager/autoloader.php';
var_dump($_SESSION['AUTH']);
var_dump( authLevel() );
?>

View File

@ -13,7 +13,7 @@
/* NSERTION DES UTILISATEURS DANS LA BDD DEPUIS JSON /* INSERTION DES UTILISATEURS DANS LA BDD DEPUIS JSON
* *
* *
* @return status<Boolean> TRUE si aucune erreur, sinon FALSE * @return status<Boolean> 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") );
?> ?>