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:
parent
009b174437
commit
692e8e508f
|
@ -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
124
index.php
|
@ -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();
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -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
|
||||||
|
=========================================================*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
|
@ -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 );
|
||||||
|
|
||||||
|
@ -76,12 +76,17 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [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']); }
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?php define('__ROOT__', dirname(dirname(__FILE__)) );
|
||||||
|
require_once __ROOT__.'/manager/autoloader.php';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var_dump($_SESSION['AUTH']);
|
||||||
|
var_dump( authLevel() );
|
||||||
|
|
||||||
|
?>
|
|
@ -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") );
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
Loading…
Reference in New Issue