From da7860b0b7f5286b43791ebc38092e48e7342da4 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 30 Jan 2017 18:39:21 +0100 Subject: [PATCH] Upgraded to Error:2.0 + api:2.2 --- build/api/core/AuthSystem.php | 21 + build/api/core/Authentification.php | 22 +- build/api/core/Checker.php | 9 +- build/api/core/ModuleFactory.php | 31 + .../core/{ModuleRequest.php => Request.php} | 294 +++++--- .../core/{ModuleResponse.php => Response.php} | 76 +- build/api/module/authentificationDefault.php | 13 +- build/api/module/clusterDefault.php | 40 +- build/api/module/historyDefault.php | 12 +- build/api/module/machineDefault.php | 39 +- build/api/module/module.php | 20 +- build/api/module/userDefault.php | 36 +- build/database/core/DatabaseDriver.php | 5 +- build/database/core/Repo.php | 21 +- build/database/repo/action.php | 1 - build/database/repo/action_merge.php | 20 +- build/database/repo/chip.php | 1 - build/database/repo/global_state.php | 1 - build/database/repo/history.php | 0 build/database/repo/machine_cluster.php | 20 +- build/database/repo/pin_merge.php | 1 - build/database/repo/state.php | 1 - build/database/repo/user_cluster.php | 20 +- build/error/core/Err.php | 109 +++ build/error/core/Error.php | 283 ++++--- build/http/core/HttpRequest.php | 198 +++++ build/viewer/core/Viewer.php | 14 +- build/viewer/view/group/group_choice.php | 7 +- build/viewer/view/group/group_choice.twig | 0 build/viewer/view/group/members_choice.php | 19 +- build/viewer/view/group/members_choice.twig | 0 build/viewer/view/group/permission.php | 19 +- build/viewer/view/group/permission.twig | 0 build/viewer/view/group/view.php | 11 +- build/viewer/view/group/view.twig | 0 build/viewer/view/history/view.php | 7 +- build/viewer/view/history/view.twig | 0 build/viewer/view/machine/groups.php | 11 +- build/viewer/view/machine/groups.twig | 0 build/viewer/view/machine/view.php | 12 +- build/viewer/view/machine/view.twig | 0 build/viewer/view/user/groups.php | 11 +- build/viewer/view/user/groups.twig | 0 build/viewer/view/user/view.php | 11 +- build/viewer/view/user/view.twig | 0 config/modules.json | 88 +-- lib/composer.json | 0 lib/composer.lock | 0 public_html/css/font.scss | 0 .../css/font/Open Sans/Apache License.txt | 0 public_html/css/font/Open Sans/L.ttf | Bin public_html/css/font/Open Sans/Li.ttf | Bin public_html/css/font/Open Sans/R.ttf | Bin public_html/css/font/Open Sans/SB.ttf | Bin public_html/css/font/Open Sans/b.ttf | Bin public_html/css/font/Open Sans/bi.ttf | Bin public_html/css/font/Open Sans/i.ttf | Bin public_html/css/min/fonts.css | 0 public_html/index.php | 22 +- public_html/test/client/interface.php | 704 +++++++++--------- public_html/view/admin.php | 4 +- public_html/view/analytics.php | 3 +- public_html/view/css/admin.css | 0 public_html/view/css/analytics.css | 0 public_html/view/css/groups.css | 0 public_html/view/css/history.css | 0 public_html/view/css/machines.css | 0 public_html/view/css/profile.css | 0 public_html/view/css/settings.css | 0 public_html/view/css/users.css | 0 public_html/view/css/view.css | 0 public_html/view/css/warehouse.css | 0 public_html/view/groups.php | 5 +- public_html/view/history.php | 3 +- public_html/view/js/admin.js | 0 public_html/view/js/profile.js | 0 public_html/view/js/settings.js | 0 public_html/view/js/view.js | 0 public_html/view/js/warehouse.js | 0 public_html/view/machines.php | 3 +- public_html/view/profile.php | 3 +- public_html/view/settings.php | 3 +- public_html/view/users.php | 3 +- public_html/view/warehouse.php | 3 +- 84 files changed, 1370 insertions(+), 890 deletions(-) create mode 100644 build/api/core/AuthSystem.php mode change 100755 => 100644 build/api/core/Checker.php create mode 100644 build/api/core/ModuleFactory.php rename build/api/core/{ModuleRequest.php => Request.php} (59%) mode change 100755 => 100644 rename build/api/core/{ModuleResponse.php => Response.php} (74%) mode change 100755 => 100644 mode change 100644 => 100755 build/api/module/historyDefault.php mode change 100644 => 100755 build/database/repo/history.php create mode 100644 build/error/core/Err.php mode change 100755 => 100644 build/error/core/Error.php create mode 100644 build/http/core/HttpRequest.php mode change 100644 => 100755 build/viewer/view/group/group_choice.twig mode change 100644 => 100755 build/viewer/view/group/members_choice.php mode change 100644 => 100755 build/viewer/view/group/members_choice.twig mode change 100644 => 100755 build/viewer/view/group/permission.twig mode change 100644 => 100755 build/viewer/view/group/view.twig mode change 100644 => 100755 build/viewer/view/history/view.php mode change 100644 => 100755 build/viewer/view/history/view.twig mode change 100644 => 100755 build/viewer/view/machine/groups.twig mode change 100644 => 100755 build/viewer/view/machine/view.twig mode change 100644 => 100755 build/viewer/view/user/groups.twig mode change 100644 => 100755 build/viewer/view/user/view.twig mode change 100644 => 100755 lib/composer.json mode change 100644 => 100755 lib/composer.lock mode change 100644 => 100755 public_html/css/font.scss mode change 100644 => 100755 public_html/css/font/Open Sans/Apache License.txt mode change 100644 => 100755 public_html/css/font/Open Sans/L.ttf mode change 100644 => 100755 public_html/css/font/Open Sans/Li.ttf mode change 100644 => 100755 public_html/css/font/Open Sans/R.ttf mode change 100644 => 100755 public_html/css/font/Open Sans/SB.ttf mode change 100644 => 100755 public_html/css/font/Open Sans/b.ttf mode change 100644 => 100755 public_html/css/font/Open Sans/bi.ttf mode change 100644 => 100755 public_html/css/font/Open Sans/i.ttf mode change 100644 => 100755 public_html/css/min/fonts.css mode change 100644 => 100755 public_html/view/css/admin.css mode change 100644 => 100755 public_html/view/css/analytics.css mode change 100644 => 100755 public_html/view/css/groups.css mode change 100644 => 100755 public_html/view/css/history.css mode change 100644 => 100755 public_html/view/css/machines.css mode change 100644 => 100755 public_html/view/css/profile.css mode change 100644 => 100755 public_html/view/css/settings.css mode change 100644 => 100755 public_html/view/css/users.css mode change 100644 => 100755 public_html/view/css/view.css mode change 100644 => 100755 public_html/view/css/warehouse.css mode change 100644 => 100755 public_html/view/js/admin.js mode change 100644 => 100755 public_html/view/js/profile.js mode change 100644 => 100755 public_html/view/js/settings.js mode change 100644 => 100755 public_html/view/js/view.js mode change 100644 => 100755 public_html/view/js/warehouse.js diff --git a/build/api/core/AuthSystem.php b/build/api/core/AuthSystem.php new file mode 100644 index 0000000..f0f6ed1 --- /dev/null +++ b/build/api/core/AuthSystem.php @@ -0,0 +1,21 @@ + Module concerné + * @expected Liste des permissions attendues + * + * @return error Erreur associée à la permission (Success/PermissionError/TokenError/etc) + * + */ + public static function permission($module, $expected); + } + +?> diff --git a/build/api/core/Authentification.php b/build/api/core/Authentification.php index 867df20..91a6073 100755 --- a/build/api/core/Authentification.php +++ b/build/api/core/Authentification.php @@ -4,15 +4,17 @@ use \database\core\Repo; use \error\core\Error; + use \error\core\Err; + use \api\core\AuthSystem; - class Authentification{ - - // Contiendra les erreurs - public $error; + class Authentification implements AuthSystem{ + public function __construct(){ + self::check(); + } @@ -133,7 +135,7 @@ * @module Module concerné * @expected Liste des permissions attendues * - * @return status Si FALSE, pas la permission, sinon si + * @return error Si FALSE, pas la permission, sinon si * */ public static function permission($module, $expected){ @@ -148,12 +150,12 @@ /* (1) Si entrepot requis, mais manquant ---------------------------------------------------------*/ if( in_array('warehouse', $expected) && self::auth() < 1 ) - return Error::PermissionError; + return new Error(Err::PermissionError); /* (2) Si admin requis, mais manquant ---------------------------------------------------------*/ if( in_array('admin', $expected) && self::auth() < 2 ) - return Error::PermissionError; + return new Error(Err::PermissionError); /* (3) On retire 'warehouse' et 'admin' de @expected ---------------------------------------------------------*/ @@ -169,7 +171,7 @@ foreach($expected as $permission) // Si il manque au minimum une permission, on retourne FALSE if( !in_array($permission, $_SESSION['PERM']) ) - return Error::PermissionError; + return new Error(Err::PermissionError); /* [3] Vérification que le module est actif pour l'entrepot @@ -185,12 +187,12 @@ /* (3) Si aucune autorisation et pas module "Default" */ if( !$allowedModule && !$defaultModule ) - return Error::DisabledModule; + return new Error(Err::DisabledModule); /* [4] Si on a toutes les permissions requises =========================================================*/ - return Error::Success; + return new Error(Err::Success); } diff --git a/build/api/core/Checker.php b/build/api/core/Checker.php old mode 100755 new mode 100644 index a149e36..0aa6056 --- a/build/api/core/Checker.php +++ b/build/api/core/Checker.php @@ -81,11 +81,6 @@ return $checker && is_numeric($value) && $value <= 2147483647 && $value >= 0; break; - // Code RFID - case 'rfid': - return $checker && is_string($value) && preg_match('/^[\dA-F]{2}(\-[\dA-F]{2}){3,5}$/i', $value); - break; - // String quelconque (peut etre vide) case 'text': return $checker && is_string($value); @@ -132,6 +127,10 @@ return $checker && is_string($value) && json_decode($value, true) !== NULL; break; + case 'numeric': + return $checker && (is_numeric($value) || $value == null || $value == 'null'); + break; + default: return false; break; diff --git a/build/api/core/ModuleFactory.php b/build/api/core/ModuleFactory.php new file mode 100644 index 0000000..527d5e9 --- /dev/null +++ b/build/api/core/ModuleFactory.php @@ -0,0 +1,31 @@ + Nom du module + * @arguments [OPTIONNEL] Arguments à passer au constructeur + * + * @return instance Instance du module en question + * + */ + public static function getModule($module, $arguments=[]){ + /* (1) On gère les arguments */ + $arguments = is_array($arguments) ? $arguments : []; + + /* (1) On vérifie que la classe existe */ + if( !file_exists(__BUILD__."/api/module/$module.php") ) + return false; + + /* (2) On récupère la classe */ + $class_name = "\\api\\module\\$module"; + + /* (3) On retourne une instance */ + return new $class_name($arguments); + } + + } diff --git a/build/api/core/ModuleRequest.php b/build/api/core/Request.php old mode 100755 new mode 100644 similarity index 59% rename from build/api/core/ModuleRequest.php rename to build/api/core/Request.php index d8418e7..67feebd --- a/build/api/core/ModuleRequest.php +++ b/build/api/core/Request.php @@ -2,17 +2,21 @@ namespace api\core; use \database\core\DatabaseDriver; - use \api\core\Authentification; + use \api\core\AuthSystem; + use \api\core\ModuleFactory; use \error\core\Error; + use \error\core\Err; + use \http\core\HttpRequest; - class ModuleRequest{ + class Request{ // Constantes - public static function config_path(){ return __ROOT__.'/config/modules.json'; } - public static $default_options = [ + private static function config_path(){ return __ROOT__.'/config/modules.json'; } + private static $default_options = [ 'download' => false ]; + private static $authsystem = null; // Attributs prives utiles (initialisation) private $path; @@ -39,66 +43,80 @@ * */ public function __construct($path=null, $params=null){ - // Si pas parametre manquant, on quitte + /* [1] Fetch HttpRequest correct data + =========================================================*/ + /* (1) Parse HttpRequest data because php doesn't parse it for non-POST HTTP method */ + $httprequest = new HttpRequest(); + $_POST = $httprequest->POST(); + + + /* [2] Initialisation + =========================================================*/ + /* (1) Erreur par défaut */ + $this->error = new Error(Err::Success); + + /* (2) Si pas parametre manquant, on quitte */ if( $path == null ){ - $this->error = Error::MissingPath; + $this->error->set(Err::MissingPath); return false; } - /* [0] On met a jour la configuration + + /* [3] On met a jour la configuration =========================================================*/ - // Modules specifies + /* (1) Section Title */ $this->modules = json_decode( file_get_contents(self::config_path()), true ); - // Gestion de l'erreur de parsage + /* (2) Gestion de l'erreur de parsage */ if( $this->modules == null ){ - $this->error = Error::ParsingFailed; + $this->error->set(Err::ParsingFailed, 'json'); return false; } - /* [1] Verification des types des parametres + /* [4] Verification des types des parametres =========================================================*/ - // Type de @path + /* (1) Section Title */ if( !is_string($path) ){ // Si le type est incorrect - $this->error = Error::WrongPathModule; + $this->error->set(Err::WrongPathModule); return false; // On retourne FALSE, si erreur } - // Type de @data (optionnel) + /* (2) Section Title */ $params = (is_array($params)) ? $params : []; + /* (3) On définit en constante la méthode HTTP */ + define('__HTTP_METHOD__', strtoupper($_SERVER['REQUEST_METHOD'])); - /* [2] Verification du chemin (existence module+methode) + + /* [5] Verification du chemin (existence module+methode) =========================================================*/ if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution return false; - - /* [3] Verification des droits + /* [6] Verification des droits =========================================================*/ if( !$this->checkPermission() ) // Si on a pas les droits return false; - /* [4] Verification des parametres (si @type est defini) + /* [7] Verification des parametres (si @type est defini) =========================================================*/ - if( !$this->checkParams($params) ){ // Verification de tous les types - $this->error = Error::ParamError; + if( !$this->checkParams($params) ) // Verification de tous les types return false; - } - /* [5] Récupèration des options + + /* [8] Récupèration des options =========================================================*/ $this->buildOptions(); - /* [6] Construction de l'objet + /* [9] Construction de l'objet =========================================================*/ $this->params = $params; - $this->error = Error::Success; + $this->error->set(Err::Success); return true; // On retourne que tout s'est bien passe @@ -106,9 +124,27 @@ + /* DEFINIT LE SYSTEME D'AUTHENTIFICATION + * + * @instance Instance de type AuthSystem + * + * @return success Whether the AuthSystem is valid or not + * + */ + public static function setAuthSystem($instance=null){ + /* (1) Check instance type */ + if( !($instance instanceof AuthSystem) ) + return false; + + /* (2) Store instance */ + self::$authsystem = $instance; + } + + + /* EXECUTE LE TRAITEMENT ASSOCIE ET REMPLIE LA REPONSE * - * @return answer Retourne une reponse de type si tout s'est bien passe + * @return answer Retourne une reponse de type si tout s'est bien passe * */ public function dispatch(){ @@ -119,84 +155,108 @@ /* [1] On verifie qu'aucune erreur n'a ete signalee =========================================================*/ - if( $this->error != Error::Success ) // si il y a une erreur - return new ModuleResponse($this->error); // on la passe a la reponse + if( $this->error->get() !== Err::Success ) // si il y a une erreur + return new Response($this->error); // on la passe a la reponse - /* [2] On verifie que la methode est amorcable + /* [2] On essaie d'instancier le module =========================================================*/ - if( !is_callable($this->getFunctionCaller()) ){ - $this->error = Error::UncallableMethod; - return new ModuleResponse($this->error); + $instance = ModuleFactory::getModule($this->path['module']); + + if( $instance === false ){ + $this->error->set(Err::UncallableModule, $this->path['module']); + return new Response($this->error); + } + + /* [3] On verifie que la methode est amorcable + =========================================================*/ + if( !is_callable([$instance, $this->getModuleMethod()]) ){ + $this->error->set(Err::UncallableMethod, preg_replace('/\w+::/i', '', $this->path['method']) ); + return new Response($this->error); } - /* [3] On amorce la methode + /* [4] On amorce la methode =========================================================*/ - $returned = call_user_func( $this->getFunctionCaller(), $this->params ); + /* (1) On lance la fonction */ + $returned = call_user_func( [$instance, $this->getModuleMethod()], $this->params ); + + /* (2) On appelle le destructeur (si défini) */ + $instance = null; - /* [4] Gestion de la reponse + /* [5] Gestion de la reponse =========================================================*/ - $response = new ModuleResponse($this->error); + /* (1) On construit la réponse avec l'erreur */ + $response = new Response($this->error); + + /* (2) On ajoute les données */ $response->appendAll($returned); + // On retourne la réponse return $response; } - - - - - - /* EXECUTE LE TRAITEMENT ASSOCIE ET RENVOIE UN FICHIER AVEC LE HEADER ET LE BODY SPECIFIE * */ public function download(){ /* [1] On verifie qu'aucune erreur n'a ete signalee =========================================================*/ - if( $this->error != Error::Success ) // si il y a une erreur - return new ModuleResponse($this->error); // on la passe a la reponse + if( $this->error->get() !== Err::Success ) // si il y a une erreur + return new Response($this->error); // on la passe a la reponse - /* [2] On verifie que la methode est amorcable + /* [2] On essaie d'instancier le module =========================================================*/ - if( !is_callable($this->getFunctionCaller()) ){ - $this->error = Error::UncallableMethod; - return new ModuleResponse($this->error); + $instance = ModuleFactory::getModule($this->path['module']); + + if( $instance === false ){ + $this->error->set(Err::UncallableModule); + return new Response($this->error); + } + + /* [3] On verifie que la methode est amorcable + =========================================================*/ + if( !is_callable([$instance, $this->getModuleMethod()]) ){ + $this->error->set(Err::UncallableMethod); + return new Response($this->error); } - /* [3] On amorce la methode + /* [4] On amorce la methode =========================================================*/ - $returned = call_user_func( $this->getFunctionCaller(), $this->params ); + /* (1) On lance la fonction */ + $returned = call_user_func( [$instance, $this->getModuleMethod()], $this->params ); + + /* (2) On appelle le destructeur (si défini) */ + $instance = null; - /* [4] Vérification des erreurs et paramètres + /* [5] Vérification des erreurs et paramètres =========================================================*/ /* (1) Vérification de l'erreur retournée, si pas Success, on retourne l'erreur */ - if( isset($returned['ModuleError']) && $returned['ModuleError'] != Error::Success ){ - $this->error = $returned['ModuleError']; - return new ModuleResponse($this->error); + if( isset($returned['error']) && $returned['error'] instanceof Error && $returned['error']->get() != Err::Success ){ + $this->error = $returned['error']; + return new Response($this->error); } /* (2) Vérification du contenu, si pas défini */ if( !isset($returned['body']) ){ - $this->error = Error::ParamError; - return new ModuleResponse($this->error); + $this->error->set(Err::ParamError); + return new Response($this->error); } /* (3) Si @headers n'est pas défini on met par défaut */ if( !isset($returned['headers']) || !is_array($returned['headers']) ) $returned['headers'] = []; - $fromAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'; - /* [5] Si la requête vient d'ajax on crée un fichier temporaire et on renvoie son URL + + /* [6.1] Si requête ajax on crée un fichier temporaire et on renvoie son URL =========================================================*/ if( $fromAjax ){ @@ -233,12 +293,12 @@ fclose($tmpfile); chmod($tmpfnameroot, 0775); - $response = new ModuleResponse(Error::Success); + $response = new Response($this->error); $response->append('link', $tmpfname); return $response; - /* [6] Gestion du download direct si pas AJAX + /* [6.2] Gestion du download direct si pas AJAX =========================================================*/ }else{ /* (1) On définit les headers */ @@ -253,53 +313,77 @@ } - /* DESERIALISATION A PARTIR DES DONNEES POST + /* DESERIALISATION A PARTIR DE L'URL ET DES DONNEES POST (OPT) * - * @url Contenu de l'url après api/ (si existe) - * @post Tableau des donnes $_POST => @path + @data (opt) + * @url Contenu de l'url formatté (commence à "/module/methode") + * @post [opt] Tableau des donnes * - * @return instance Retourne un objet de type + * @return instance Retourne un objet de type + * + * @note + * 1. `path` peut être dans l'url : /method/module + * `path` peut être dans les données $_POST + * 2. les données peuvent être dans l'url : /module/method/data1/data2/... + * les données peuvent être dans les données $_POST * */ - public static function fromPost($url, $post){ + public static function remote($url, $data=null){ + is_null($data) && ($data = []); + /* [1] On verifie que le @path est renseigne =========================================================*/ /* (1) Si le path est dans @url */ - $pathInUrl = count($url) > 0 && is_string($url[0]) && strlen($url[0]) > 0 && preg_match('#^([\w_-]+)/([\w_-]+)/?$#', $url[0], $urlMatches); + $pathInUrl = is_string($url) && preg_match('#^/?([\w_-]+/[\w_-]+)(?:/?|/((?:\w+/)*(?:\w+/?)))$#', $url, $urlMatches); + + /* (2) On récupère le @path + les arguments dans l'URL */ + if( $pathInUrl ){ + // {1} On ajoute le @path aux données // + $data['path'] = $urlMatches[1]; + + // {2} On ajoute les arguments d'URL aux données // + if( count($urlMatches) > 2 ){ + + $urlParams = explode('/', trim($urlMatches[2], '/')); + foreach($urlParams as $k=>$v) + $data["URL_$k"] = $v; + + } + + } - // On l'utilise pour le chemin - if( $pathInUrl ) - $post['path'] = $urlMatches[1].'/'.$urlMatches[2]; /* (2) On vérifie dans tous les cas si le path existe */ - if( !isset($post['path']) ) - return new ModuleRequest(); + if( !isset($data['path']) ) + return new Request(); - /* [2] On verifie que @data est renseigne + /* [3] On met les paramètres en JSON =========================================================*/ - // Si variable n'existe pas, on cree un tableau vide - $params = $post; + /* (1) On initialise les paramètres*/ + $params = []; - // On retire le @path de @params - unset($params['path']); + /* (2) On met tous les paramètres en json (sauf @path) */ + foreach($data as $name=>$value){ + if( $name === 'path' ) + continue; - - - /* [3] On met les paramètres JSON en JSON (si ils décodent sans erreur) - =========================================================*/ - foreach($params as $name=>$value){ + // {1} On met en JSON // $json = json_decode( $value, true ); - // Si aucune erreur, on affecte la valeur + + // {2} Si ok -> on remplace // if( !is_null($json) ) $params[$name] = $json; + + // {3} Sinon, on laisse tel quel // + else + $params[$name] = $value; } - /* [4] On retourne une instance de + + /* [4] On retourne une instance de =========================================================*/ - // On cree notre requete avec le token - return new ModuleRequest($post['path'], $params); + return new Request($data['path'], $params); } @@ -317,19 +401,19 @@ /* [1] Verification format general =========================================================*/ if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ){ // Si mauvais format - $this->error = Error::WrongPathModule; + $this->error->set(Err::WrongPathModule); return false; } - // On recupere les donnes de la regex + // On recupere les données de la regex $module = $matches[1]; - $method = $matches[2]; + $method = __HTTP_METHOD__.'::'.$matches[2]; /* [2] Verification de l'existence du module (conf) =========================================================*/ if( !array_key_exists($module, $this->modules) ){ // Si le module n'est pas specifie dans la conf - $this->error = Error::UnknownModule; + $this->error->set(Err::UnknownModule, $module); return false; // On retourne FALSE, si erreur } @@ -337,7 +421,7 @@ /* [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 = Error::UnknownMethod; + $this->error->set(Err::UnknownMethod, preg_replace('/\w+::/i', '', $method) ); return false; // On retourne FALSE, si erreur } @@ -370,17 +454,21 @@ $method = $this->modules[$this->path['module']][$this->path['method']]; // Si aucune permission n'est definie - if( !isset($method['permissions']) ) return true; + if( !isset($method['permissions']) || !is_array($method['permissions']) || count($method['permissions']) < 1 ) + return true; /* [2] Vérification des permissions et de l'authentification =========================================================*/ - $granted = Authentification::permission($this->path['module'], $method['permissions']); + $granted = self::$authsystem::permission( $this->path['module'], $method['permissions'] ); /* (1) On retourne FAUX si aucun droit n'a ete trouve */ - if( $granted !== Error::Success ) - $this->error = Error::PermissionError; + if( $granted->get() !== Err::Success ){ + $this->error = $granted; + return false; + } + @@ -403,7 +491,10 @@ /* [1] On verifie qu'il ne manque aucun parametre =========================================================*/ // Si @params n'est pas un tableau - if( !is_array($params) ) return false; + if( !is_array($params) ){ + $this->error->set(Err::ConfigError); + return false; + } $method = $this->modules[$this->path['module']][$this->path['method']]; @@ -418,8 +509,10 @@ $isFile = isset($paramsdata['type']) && $paramsdata['type'] == 'FILE' && isset($_FILES[$name]); /* (3) Si le paramètre est obligatoire et qu'il n'est pas donné -> erreur */ - if( !isset($params[$name]) && !$optional && !$isFile ) + if( !isset($params[$name]) && !$optional && !$isFile ){ + $this->error->set(Err::MissingParam, $name); return false; + } /* (4) Si le type n'est pas defini, on a pas besoin de le vérifier */ if( !isset($paramsdata['type']) ) @@ -440,8 +533,10 @@ /* (6) Si le paramètre est renseigné */ }else // Si la verification est fausse, on retourne faux - if( !Checker::run($paramsdata['type'], $params[$name]) ) + if( !Checker::run($paramsdata['type'], $params[$name]) ){ + $this->error->set(Err::WrongParam, $name, $paramsdata['type']); return false; + } } @@ -499,11 +594,12 @@ /* RENVOI LE CHEMIN D'AMORCAGE DE LA METHODE * - * @return path Retourne le chemin d'amorcage de la requete + * @return method Retourne le chemin d'amorcage de la method * */ - private function getFunctionCaller(){ - return [ '\\api\\module\\'.$this->path['module'], $this->path['method'] ]; + private function getModuleMethod(){ + /* (1) On essaie de trouver le bon nom */ + return preg_replace('/\w+::/i', '', $this->path['method']); } diff --git a/build/api/core/ModuleResponse.php b/build/api/core/Response.php old mode 100755 new mode 100644 similarity index 74% rename from build/api/core/ModuleResponse.php rename to build/api/core/Response.php index bfa39ea..840f91b --- a/build/api/core/ModuleResponse.php +++ b/build/api/core/Response.php @@ -2,47 +2,30 @@ namespace api\core; use \error\core\Error; + use \error\core\Err; - - // FORMAT: - // - // path: "nomModule/nomMethode" - // data1: {donnee1} - // data2: {donnee2} - // ... - // - // - // - // - - class ModuleResponse{ + class Response{ // Attributs prives utiles (initialisation) private $data; public $error; - - - - /* CONSTRUCTEUR D'UNE REPONSE DE MODULE * * @error Erreur passee par la requete (si existe) * */ - public function __construct($error=Error::Success){ + public function __construct($error=null){ + if( !( $error instanceof Error ) ) + $error = new Error(Err::Success); + $this->data = []; $this->error = $error; } + /* AJOUTE UNE DONNEE A LA REPONSE - - - - - - /* AJOUTE UNE DONNEE A LA REPONSE * * @key Le nom de la valeur a ajouter * @value La valeur a ajouter @@ -56,12 +39,6 @@ } - - - - - - /* AJOUTE TOUTES LES DONNEES A LA REPONSE * * @dataset Le tableau associatif correspondant a la reponse @@ -69,14 +46,15 @@ */ public function appendAll($dataset){ // Si ce n'est pas un tableau, on ne fais rien - if( !is_array($dataset) ) return $this; + if( !is_array($dataset) ) + return $this; // Si une valeur contient une erreur - if( array_key_exists('ModuleError', $dataset) ){ + if( array_key_exists('error', $dataset) && $dataset['error'] instanceof Error){ // On definit cette erreur - $this->error = $dataset['ModuleError']; + $this->error = $dataset['error']; // On enleve cette entree des donnees - unset($dataset['ModuleError']); + unset($dataset['error']); } // Ajoute une entree pour la cle @key et de valeur @value @@ -84,14 +62,9 @@ return $this; } + /* RECUPERE UNE DONNEE DE LA REPONSE - - - - - - /* RECUPERE UNE DONNEE DE LA REPONSE * * @key Le nom de la valeur a recuperer * @@ -109,12 +82,6 @@ } - - - - - - /* RECUPERE TOUTES LES DONNEES DE LA REPONSE * * @return data Les donnees de la reponse @@ -126,10 +93,6 @@ } - - - - /* SERIALISATION A PARTIR DES DONNEES * * @return json Retourne les donnees serialisees @@ -138,15 +101,15 @@ public function serialize(){ // Code Http - Error::setHttpCode($this->error); + $this->error->setHttpCode(); // Type de contenu - // header('Content-Type: application/json; charset=utf-8'); + header('Content-Type: application/json; charset=utf-8'); // On rajoute l'erreur au message $returnData = array_merge([ - 'ModuleError' => $this->error, - 'ErrorDescription' => Error::explicit($this->error) + 'error' => $this->error->get(), + 'ErrorDescription' => $this->error->explicit() ], $this->data ); @@ -154,9 +117,6 @@ return json_encode($returnData); } - - - - } + } ?> diff --git a/build/api/module/authentificationDefault.php b/build/api/module/authentificationDefault.php index 56e6c81..5416997 100755 --- a/build/api/module/authentificationDefault.php +++ b/build/api/module/authentificationDefault.php @@ -4,12 +4,19 @@ use \database\core\DatabaseDriver; use \manager\sessionManager; use \api\core\Authentification; - use \error\core\Error; use \database\core\Repo; use \manager\repo\cluster as clusterRepo; class authentificationDefault{ + public function __construct(){ + // Routine to execute before each call to authentificationDefault's method + } + + public function __destruct(){ + // Routine to execute after each call to authentificationDefault's method + } + /* CONNEXION A UN ENTREPOT * * @name Nom de l'entrepot @@ -18,7 +25,7 @@ * @return status TRUE si les crédits sont bons, sinon FALSE * */ - public static function warehouse($params){ + public function warehouse($params){ extract($params); @@ -70,7 +77,7 @@ * @return status TRUE si les crédits sont bons, sinon FALSE * */ - public static function admin($params){ + public function admin($params){ extract($params); /* [0] Par défaut, on déconnecte l'administrateur diff --git a/build/api/module/clusterDefault.php b/build/api/module/clusterDefault.php index d54a3d8..6e9c041 100755 --- a/build/api/module/clusterDefault.php +++ b/build/api/module/clusterDefault.php @@ -10,6 +10,8 @@ class clusterDefault{ + public function __construct(){} + public function __destruct(){} /* CREATION D'UN NOUVEL UTILISATEUR DANS LA BDD * @@ -19,7 +21,7 @@ * @return id_cluster Retourne l'UID du groupe * */ - public static function create($params){ + public function create($params){ extract($params); /* [2] Creation du groupe @@ -35,7 +37,7 @@ // Si une erreur est retournee, on retourne une erreur if( $id_cluster === false ) - return ['ModuleError' => Error::ModuleError]; + return ['ModuleError' => new Error(Err::ModuleError)]; /* [5] Gestion du retour @@ -57,7 +59,7 @@ * @return clusters Retourne la liste des groupes trouves * */ - public static function search($params){ + public function search($params){ extract($params); $result = []; @@ -101,7 +103,7 @@ * @return clusters Liste des groupes * */ - public static function getAll($params){ + public function getAll($params){ extract($params); $result = []; @@ -144,7 +146,7 @@ * @return cluster Groupe d'UID donne * */ - public static function getById($params){ + public function getById($params){ extract($params); $repoMethod = ($class==0) ? 'user_cluster/getById' : 'machine_cluster/getById'; @@ -158,7 +160,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'cluster' => $answer ]; @@ -176,7 +178,7 @@ * @return cluster Groupe de nom donne * */ - public static function getByName($params){ + public function getByName($params){ extract($params); $repoMethod = ($class==0) ? 'user_cluster/getByName' : 'machine_cluster/getByName'; @@ -190,7 +192,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'cluster' => $answer ]; @@ -208,7 +210,7 @@ * @return members Membres du groupe donne * */ - public static function getMembers($params){ + public function getMembers($params){ extract($params); $repoMethod = ($class==0) ? 'user_cluster/getMembers' : 'machine_cluster/getMembers'; @@ -222,7 +224,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'members' => $answer ]; @@ -241,7 +243,7 @@ * @return status Retourne si oui ou non tout s'est bien deroule * */ - public static function edit($params){ + public function edit($params){ extract($params); @@ -257,7 +259,7 @@ // Si on a recupere aucun utilisateur, on retourne une erreur if( $cluster_data === false ) - return ['ModuleError' => Error::NoMatchFound]; + return ['ModuleError' => new Error(Err::NoMatchFound)]; @@ -298,7 +300,7 @@ * @return status Retourne si oui ou non tout s'est bien deroule * */ - public static function delete($params){ + public function delete($params){ extract($params); $repoMethod = ($class==0) ? 'user_cluster/delete' : 'machine_cluster/delete'; @@ -322,7 +324,7 @@ * @id_action UID de l'action en question * */ - public static function addPermission($params){ + public function addPermission($params){ extract($params); /* [1] On crée la relation via le repo @@ -346,7 +348,7 @@ * @id_action UID de l'action en question * */ - public static function remPermission($params){ + public function remPermission($params){ extract($params); /* [1] On supprime la relation via le repo @@ -371,7 +373,7 @@ * @return permissions Liste des permissions du groupe * */ - public static function getPermissions($params){ + public function getPermissions($params){ extract($params); /* [1] On propage au repo @@ -384,7 +386,7 @@ // Gestion erreur if( !is_array($res) ) - return ['ModuleError' => Error::NoMatchFound]; + return ['ModuleError' => new Error(Err::NoMatchFound)]; /* (3) On retourne le résultat */ return [ 'permissions' => $res ]; @@ -399,7 +401,7 @@ * @return clusters Liste des user_cluster ayant la permission sur le groupe target * */ - public static function getAuthenticatedClusters($params){ + public function getAuthenticatedClusters($params){ extract($params); /* [1] On propage au repo @@ -410,7 +412,7 @@ // error if( !is_array($res) ) - return ['ModuleError' => Error::NoMatchFound]; + return ['ModuleError' => new Error(Err::NoMatchFound)]; return ['clusters' => $res]; } diff --git a/build/api/module/historyDefault.php b/build/api/module/historyDefault.php old mode 100644 new mode 100755 index 521fd0d..2253948 --- a/build/api/module/historyDefault.php +++ b/build/api/module/historyDefault.php @@ -8,6 +8,8 @@ class historyDefault{ + public function __construct(){} + public function __destruct(){} /* CREATION D'UNE NOUVELLE ENTREE DANS LA BDD @@ -20,7 +22,7 @@ * @return status Retourne si oui ou non, tout s'est bien passe * */ - public static function create($params){ + public function create($params){ extract($params); /* [1] Creation de l'utilisateur @@ -35,7 +37,7 @@ // Si une erreur est retournee, on retourne une erreur if( $id_entry === false ) - return ['ModuleError' => Error::ModuleError]; + return ['ModuleError' => new Error(Err::ModuleError)]; /* [2] Gestion du retour @@ -56,7 +58,7 @@ * @return users Retourne la liste des utilisateurs trouves * */ - public static function search($params){ + public function search($params){ extract($params); // On recupere les donnees @@ -77,7 +79,7 @@ * @return history Liste des entrées de l'historique * */ - public static function getAll(){ + public function getAll(){ // On recupere les donnees $entries = new Repo('history/getAll', [ $_SESSION['WAREHOUSE']['id'] ]); @@ -92,7 +94,7 @@ * @return status Retourne si oui ou non tout s'est bien deroule * */ - public static function delete($params){ + public function delete($params){ extract($params); /* [1] On supprime l'utilisateur diff --git a/build/api/module/machineDefault.php b/build/api/module/machineDefault.php index bfcc479..3c7b4c3 100755 --- a/build/api/module/machineDefault.php +++ b/build/api/module/machineDefault.php @@ -9,6 +9,9 @@ class machineDefault{ + public function __construct(){} + public function __destruct(){} + /* CREATION D'UNE NOUVELLE MACHINE DANS LA BDD * @@ -17,7 +20,7 @@ * @return status Retourne si oui ou non, tout s'est bien passe * */ - public static function create($params){ + public function create($params){ extract($params); /* [1] Creation de la machine @@ -30,7 +33,7 @@ // Si une erreur est retournee, on retourne une erreur if( $id_machine === false ) - return ['ModuleError' => Error::ModuleError]; + return ['ModuleError' => new Error(Err::ModuleError)]; @@ -54,7 +57,7 @@ * Renvoie FALSE si une erreur occure * */ - public static function link($params){ + public function link($params){ extract($params); /* Creation de l'association */ @@ -81,7 +84,7 @@ * Renvoie FALSE si une erreur occure * */ - public static function unlink($params){ + public function unlink($params){ extract($params); /* Suppression de l'association */ @@ -106,7 +109,7 @@ * @return machines Retourne la liste des machines trouvees * */ - public static function search($params){ + public function search($params){ extract($params); // On recupere les donnees @@ -127,7 +130,7 @@ * @return machines Liste des machines * */ - public static function getAll(){ + public function getAll(){ // On recupere les donnees $machines = new Repo('machine/getAll', [$_SESSION['WAREHOUSE']['id']]); @@ -145,7 +148,7 @@ * @return machine Machine d'UID donne * */ - public static function getById($params){ + public function getById($params){ extract($params); // On recupere les donnees @@ -157,7 +160,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'machine' => $answer ]; @@ -174,7 +177,7 @@ * @return machine Machine de name donne * */ - public static function getByName($params){ + public function getByName($params){ extract($params); @@ -187,7 +190,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'machine' => $answer ]; @@ -204,7 +207,7 @@ * @return clusters Groupes de la machine donne * */ - public static function getClusters($params){ + public function getClusters($params){ extract($params); // On recupere les donnees @@ -216,7 +219,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'clusters' => $answer ]; @@ -234,7 +237,7 @@ * @return status Retourne si oui ou non tout s'est bien deroule * */ - public static function edit($params){ + public function edit($params){ extract($params); @@ -248,7 +251,7 @@ // Si on a recupere aucune machine, on retourne une erreur if( !is_array($machine_data) ) - return ['ModuleError' => Error::NoMatchFound]; + return ['ModuleError' => new Error(Err::NoMatchFound)]; @@ -290,7 +293,7 @@ * @return status Retourne si oui ou non tout s'est bien deroule * */ - public static function delete($params){ + public function delete($params){ extract($params); // On recupere les donnees @@ -324,7 +327,7 @@ * @return data Données d'initialisation du système * */ - public static function init($params){ + public function init($params){ extract($params); /* [1] On récupére la liste des actions @@ -459,7 +462,7 @@ * @return data Données de retour de synchronisation * */ - public static function sync($params){ + public function sync($params){ extract($params); /* [0] Vérification du token @@ -468,7 +471,7 @@ // Si token incorrect, on envoie une erreur if( $checkToken->answer() !== true ) - return [ 'ModuleError' => Error::TokenError ]; + return [ 'ModuleError' => new Error(Err::TokenError) ]; diff --git a/build/api/module/module.php b/build/api/module/module.php index 3798b4a..a855e51 100755 --- a/build/api/module/module.php +++ b/build/api/module/module.php @@ -2,17 +2,21 @@ namespace api\module; use \error\core\Error; + use \error\core\Err; use \manager\ResourceDispatcher; class module{ + public function __construct(){} + public function __destruct(){} + /* PERMET DE TESTER L'API * */ - public static function method($params){ + public function method($params){ return [ - 'ModuleError' => Error::Success, + 'ModuleError' => new Error(Err::Success), 'ReceivedArguments' => $params ]; @@ -23,7 +27,7 @@ * @return markdown Description des modules * */ - public static function markdown(){ + public function markdown(){ /* [1] Récupération de la configuration =========================================================*/ // On récupère le fichier et on le parse @@ -31,7 +35,7 @@ // Gestion de l'erreur de parsage if( $modules == null ) - return [ 'ModuleError' => Error::ParsingFailed ]; + return [ 'ModuleError' => new Error(Err::ParsingFailed) ]; /* [2] Mise en forme de la liste des modules =========================================================*/ @@ -61,7 +65,7 @@ /* [n] Gestion du retour =========================================================*/ return [ - 'ModuleError' => Error::Success, + 'ModuleError' => new Error(Err::Success), 'headers' => [ 'Content-Type' => 'text/markdown; charset=utf-8', 'Content-Transfer-Encoding' => 'binary', @@ -79,7 +83,7 @@ * @return apiBlueprint Description des modules au format API Blueprint * */ - public static function apiBlueprint(){ + public function apiBlueprint(){ /* [0] Récupération de la configuration =========================================================*/ // On récupère le fichier et on le parse @@ -87,7 +91,7 @@ // Gestion de l'erreur de parsage if( $modules == null ) - return [ 'ModuleError' => Error::ParsingFailed ]; + return [ 'ModuleError' => new Error(Err::ParsingFailed) ]; /* [1] Début du fichier custom @@ -259,7 +263,7 @@ return [ - 'ModuleError' => Error::Success, + 'ModuleError' => new Error(Err::Success), 'headers' => [ 'Content-Type' => 'application/octet-stream; charset=utf-8', 'Content-Transfer-Encoding' => 'binary', diff --git a/build/api/module/userDefault.php b/build/api/module/userDefault.php index 0c881aa..8d5fabd 100755 --- a/build/api/module/userDefault.php +++ b/build/api/module/userDefault.php @@ -8,6 +8,8 @@ class userDefault{ + public function __construct(){} + public function __destruct(){} /* CREATION D'UN NOUVEL UTILISATEUR DANS LA BDD * @@ -20,7 +22,7 @@ * @return status Retourne si oui ou non, tout s'est bien passe * */ - public static function create($params){ + public function create($params){ extract($params); /* [1] Creation de l'utilisateur @@ -37,7 +39,7 @@ // Si une erreur est retournee, on retourne une erreur if( $id_user === false ) - return ['ModuleError' => Error::ModuleError]; + return ['ModuleError' => new Error(Err::ModuleError)]; /* [2] Gestion du retour @@ -60,7 +62,7 @@ * Renvoie FALSE si une erreur occure * */ - public static function link($params){ + public function link($params){ extract($params); /* [1] Creation de l'association @@ -88,7 +90,7 @@ * Renvoie FALSE si une erreur occure * */ - public static function unlink($params){ + public function unlink($params){ extract($params); /* [1] Suppression de l'association @@ -114,7 +116,7 @@ * @return users Retourne la liste des utilisateurs trouves * */ - public static function search($params){ + public function search($params){ extract($params); // On recupere les donnees @@ -135,7 +137,7 @@ * @return utilisateurs Liste des utilisateurs * */ - public static function getAll(){ + public function getAll(){ // On recupere les donnees $users = new Repo('user/getAll', [ $_SESSION['WAREHOUSE']['id'] ]); @@ -153,7 +155,7 @@ * @return utilisateur Utilisateur d'UID donne * */ - public static function getById($params){ + public function getById($params){ extract($params); // On recupere les donnees @@ -165,7 +167,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'user' => $answer ]; @@ -182,7 +184,7 @@ * @return utilisateur Utilisateur de code donne * */ - public static function getByCode($params){ + public function getByCode($params){ extract($params); // On recupere les donnees @@ -194,7 +196,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'user' => $answer ]; @@ -211,7 +213,7 @@ * @return utilisateur Utilisateur d'username donne * */ - public static function getByUsername($params){ + public function getByUsername($params){ extract($params); @@ -224,7 +226,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'user' => $answer ]; @@ -241,7 +243,7 @@ * @return clusters Groupes de l'utilisateur donne * */ - public static function getClusters($params){ + public function getClusters($params){ extract($params); @@ -254,7 +256,7 @@ // Si aucun resultat, on retourne une erreur if( $answer === false ) - return [ 'ModuleError' => Error::NoMatchFound ]; + return [ 'ModuleError' => new Error(Err::NoMatchFound) ]; return [ 'clusters' => $answer ]; @@ -276,7 +278,7 @@ * @return status Retourne si oui ou non tout s'est bien deroule * */ - public static function edit($params){ + public function edit($params){ extract($params); /* [1] On verifie l'existence de l'utilisateur @@ -289,7 +291,7 @@ // Si on a recupere aucun utilisateur, on retourne une erreur if( !is_array($user_data) ) - return ['ModuleError' => Error::NoMatchFound]; + return ['ModuleError' => new Error(Err::NoMatchFound)]; @@ -343,7 +345,7 @@ * @return status Retourne si oui ou non tout s'est bien deroule * */ - public static function delete($params){ + public function delete($params){ extract($params); /* [1] On supprime l'utilisateur diff --git a/build/database/core/DatabaseDriver.php b/build/database/core/DatabaseDriver.php index 929551b..36cec40 100755 --- a/build/database/core/DatabaseDriver.php +++ b/build/database/core/DatabaseDriver.php @@ -2,6 +2,7 @@ namespace database\core; use \error\core\Error; + use \error\core\Err; class DataBaseDriver{ @@ -62,11 +63,11 @@ $this->pdo = new \PDO('mysql:host='.$this->host.';dbname='.$this->dbname, $this->username, $this->password, [\PDO::ATTR_TIMEOUT => 10]); // On signale que tout s'est bien passe - $this->error = Error::Success; + $this->error = new Error(Err::Success); }catch(Exception $e){ // On signale qu'il y a une erreur - $this->error = Error::PDOConnection; + $this->error = new Error(Err::PDOConnection); } } diff --git a/build/database/core/Repo.php b/build/database/core/Repo.php index 75e82d8..fdec163 100755 --- a/build/database/core/Repo.php +++ b/build/database/core/Repo.php @@ -3,6 +3,7 @@ namespace database\core; use \error\core\Error; + use \error\core\Err; use \api\core\Authentification; @@ -50,7 +51,7 @@ // Si pas parametre manquant, on quitte if( $path == null ){ - $this->error = Error::MissingPath; + $this->error = new Error(Err::MissingPath); return false; } @@ -61,7 +62,7 @@ // Gestion de l'erreur de parsage if( $this->repositories == null ){ - $this->error = Error::ParsingFailed; + $this->error = new Error(Err::ParsingFailed); return false; } @@ -71,7 +72,7 @@ =========================================================*/ // Type de @path if( !is_string($path) ){ // Si le type est incorrect - $this->error = Error::WrongPathRepo; + $this->error = new Error(Err::WrongPathRepo); return false; // On retourne FALSE, si erreur } @@ -89,7 +90,7 @@ /* [3] Construction de l'objet =========================================================*/ $this->params = $params; - $this->error = Error::Success; + $this->error = new Error(Err::Success); /* [4] Enregistrement de la reponse =========================================================*/ @@ -105,7 +106,7 @@ public function answer(){ - if( $this->error != Error::Success ) + if( $this->error != new Error(Err::Success) ) return false; return $this->answer; @@ -121,14 +122,14 @@ public function dispatch(){ /* [1] On verifie qu'aucune erreur n'a ete signalee =========================================================*/ - if( $this->error != Error::Success ) // si il y a une erreur + if( $this->error != new Error(Err::Success) ) // si il y a une erreur return false; // on la passe a la reponse /* [2] On verifie que la methode est amorcable =========================================================*/ if( !is_callable($this->getFunctionCaller()) ){ - $this->error = Error::UncallableMethod; + $this->error = new Error(Err::UncallableMethod); return false; } @@ -151,7 +152,7 @@ /* [1] Verification format general =========================================================*/ if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ){ // Si mauvais format - $this->error = Error::WrongPathRepo; + $this->error = new Error(Err::WrongPathRepo); return false; } @@ -162,14 +163,14 @@ /* [2] Verification de l'existence du repo (conf) =========================================================*/ if( !array_key_exists($repository, $this->repositories) ){ // Si le repo n'est pas specifie dans la conf - $this->error = Error::UnknownRepo; + $this->error = new Error(Err::UnknownRepo); return false; // On retourne FALSE, si erreur } /* [3] Verification de l'existence de la methode (conf) =========================================================*/ if( array_search($method, $this->repositories[$repository]) === false ){ // Si la methode n'est pas specifie dans la conf - $this->error = Error::UnknownMethod; + $this->error = new Error(Err::UnknownMethod); return false; // On retourne FALSE, si erreur } diff --git a/build/database/repo/action.php b/build/database/repo/action.php index c33b6ed..5e366df 100755 --- a/build/database/repo/action.php +++ b/build/database/repo/action.php @@ -3,7 +3,6 @@ namespace database\repo; use \database\core\DatabaseDriver; use \database\core\Repo; - use \error\core\Error; use \manager\repo\cluster as clusterRepo; class action extends parentRepo{ diff --git a/build/database/repo/action_merge.php b/build/database/repo/action_merge.php index 046a53b..dda1efb 100755 --- a/build/database/repo/action_merge.php +++ b/build/database/repo/action_merge.php @@ -3,7 +3,7 @@ namespace database\repo; use \database\core\DatabaseDriver; use \database\core\Repo; - use \error\core\Error; + use \error\core\Err; use \orm\core\Table; use \orm\core\Rows; @@ -35,7 +35,7 @@ /* (2) Si aucun résultat, on retourne une erreur */ if( $targetCheck === false ) - return Error::NoMatchFound; + return Err::NoMatchFound; /* [2] On vérifie l'existance du groupe 'source' @@ -49,7 +49,7 @@ /* (2) Si aucun résultat, on retourne une erreur */ if( $sourceCheck === false ) - return Error::NoMatchFound; + return Err::NoMatchFound; /* [3] On vérifie l'existance de l'action @@ -60,7 +60,7 @@ /* (2) Si aucun résultat, on retourne une erreur */ if( $actionCheck === false ) - return Error::NoMatchFound; + return Err::NoMatchFound; /* [4] On vérifie que l'entrée n'existe pas déja @@ -74,7 +74,7 @@ /* (3) Si les données sont identiques pour au moins une entrée, on retourne un succès */ foreach($checkAlready as $s=>$sameTarget) if( $sameTarget['id_source'] == $id_source && $sameTarget['id_action'] == $id_action ) - return Error::Success; + return Err::Success; } @@ -92,10 +92,10 @@ /* (2) Si erreur SQL, on retourne une erreur */ if( !$inserted ) - return Error::RepoError; + return Err::RepoError; - return Error::Success; + return Err::Success; } @@ -134,7 +134,7 @@ /* (3) Si on a pas trouvé, on retourne une erreur */ if( is_null($existingId) ) - return Error::NoMatchFound; + return Err::NoMatchFound; /* [2] On supprime la action @@ -150,10 +150,10 @@ /* (2) Si erreur SQL, on retourne une erreur */ if( !$deleted || self::getById($existingId) !== false ) - return Error::RepoError; + return Err::RepoError; - return Error::Success; + return Err::Success; } diff --git a/build/database/repo/chip.php b/build/database/repo/chip.php index 1e22786..b7654a1 100755 --- a/build/database/repo/chip.php +++ b/build/database/repo/chip.php @@ -3,7 +3,6 @@ namespace database\repo; use \database\core\DatabaseDriver; use \database\core\Repo; - use \error\core\Error; use \orm\core\Table; use \orm\core\Rows; diff --git a/build/database/repo/global_state.php b/build/database/repo/global_state.php index 9318800..48d2f05 100755 --- a/build/database/repo/global_state.php +++ b/build/database/repo/global_state.php @@ -3,7 +3,6 @@ namespace database\repo; use \database\core\DatabaseDriver; use \database\core\Repo; - use \error\core\Error; use \manager\repo\cluster as clusterRepo; class global_state extends parentRepo{ diff --git a/build/database/repo/history.php b/build/database/repo/history.php old mode 100644 new mode 100755 diff --git a/build/database/repo/machine_cluster.php b/build/database/repo/machine_cluster.php index 12f3074..804e935 100755 --- a/build/database/repo/machine_cluster.php +++ b/build/database/repo/machine_cluster.php @@ -2,7 +2,7 @@ namespace database\repo; use \database\core\DatabaseDriver; - use \error\core\Error; + use \error\core\Err; use \database\core\Repo; use \orm\core\Table; use \orm\core\Rows; @@ -76,7 +76,7 @@ // Si le groupe n'existe pas if( $cluster === false ) - return Error::NoMatchFound; + return Err::NoMatchFound; /* (2) On récupère l'utilisateur */ $machineR = Table::get('machine') @@ -88,7 +88,7 @@ // Si l'utilisateur n'existe pas if( $machine === false ) - return Error::NoMatchFound; + return Err::NoMatchFound; /* (3) On vérifie qu'il n'y a pas déja d'appartenance */ $cluster_mergeR = Table::get('machine_cluster_merge') @@ -100,7 +100,7 @@ // Si la relation existe déja, on ne fait rien if( $cluster_merge_exists !== false ) - return Error::Success; + return Err::Success; @@ -117,13 +117,13 @@ /* (2) Si erreur, on la retourne */ if( !$inserted ) - return Error::RepoError; + return Err::RepoError; /* (3) On vérifie quand même que l'entrée existe */ $cluster_merge_inserted = $cluster_mergeR->fetch(); /* (4) Sinon, on renvoie que tout s'est bien passé */ - return is_array($cluster_merge_inserted) ? Error::Success : Error::RepoError; + return is_array($cluster_merge_inserted) ? Err::Success : Err::RepoError; } @@ -150,7 +150,7 @@ /* (2) Si on ne trouve rien */ if( $get_merge_id === false ) - return Error::NoMatchFound; + return Err::NoMatchFound; @@ -162,15 +162,15 @@ // Si erreur if( !$deleted ) - return Error::RepoError; + return Err::RepoError; /* [2] On verifie que l'association n'existe plus =========================================================*/ if( self::getMerge($id_warehouse, $id_machine_cluster, $id_machine) !== false ) - return Error::RepoError; + return Err::RepoError; - return Error::Success; + return Err::Success; } diff --git a/build/database/repo/pin_merge.php b/build/database/repo/pin_merge.php index bc4b754..13b3a27 100755 --- a/build/database/repo/pin_merge.php +++ b/build/database/repo/pin_merge.php @@ -3,7 +3,6 @@ namespace database\repo; use \database\core\DatabaseDriver; use \database\core\Repo; - use \error\core\Error; use \manager\repo\cluster as clusterRepo; class pin_merge extends parentRepo{ diff --git a/build/database/repo/state.php b/build/database/repo/state.php index 4f8af7c..2b1ff71 100755 --- a/build/database/repo/state.php +++ b/build/database/repo/state.php @@ -3,7 +3,6 @@ namespace database\repo; use \database\core\DatabaseDriver; use \database\core\Repo; - use \error\core\Error; use \manager\repo\cluster as clusterRepo; class state extends parentRepo{ diff --git a/build/database/repo/user_cluster.php b/build/database/repo/user_cluster.php index 94b601f..4740236 100755 --- a/build/database/repo/user_cluster.php +++ b/build/database/repo/user_cluster.php @@ -2,7 +2,7 @@ namespace database\repo; use \database\core\DatabaseDriver; - use \error\core\Error; + use \error\core\Err; use \database\core\Repo; use \orm\core\Table; use \orm\core\Rows; @@ -76,7 +76,7 @@ // Si le groupe n'existe pas if( $cluster === false ) - return Error::NoMatchFound; + return Err::NoMatchFound; /* (2) On récupère l'utilisateur */ $userR = Table::get('user') @@ -88,7 +88,7 @@ // Si l'utilisateur n'existe pas if( $user === false ) - return Error::NoMatchFound; + return Err::NoMatchFound; /* (3) On vérifie qu'il n'y a pas déja d'appartenance */ $cluster_mergeR = Table::get('user_cluster_merge') @@ -100,7 +100,7 @@ // Si la relation existe déja, on ne fait rien if( $cluster_merge_exists !== false ) - return Error::Success; + return Err::Success; @@ -117,13 +117,13 @@ /* (2) Si erreur, on la retourne */ if( !$inserted ) - return Error::RepoError; + return Err::RepoError; /* (3) On vérifie quand même que l'entrée existe */ $cluster_merge_inserted = $cluster_mergeR->fetch(); /* (4) Sinon, on renvoie que tout s'est bien passé */ - return is_array($cluster_merge_inserted) ? Error::Success : Error::RepoError; + return is_array($cluster_merge_inserted) ? Err::Success : Err::RepoError; } @@ -149,7 +149,7 @@ /* (2) Si on ne trouve rien */ if( $get_merge_id == false ) - return Error::NoMatchFound; + return Err::NoMatchFound; @@ -161,15 +161,15 @@ // Si erreur if( !$deleted ) - return Error::RepoError; + return Err::RepoError; /* [2] On verifie que l'association n'existe plus =========================================================*/ if( self::getMerge($id_warehouse, $id_user_cluster, $id_user) !== false ) - return Error::ModuleError; + return Err::ModuleError; - return Error::Success; + return Err::Success; } diff --git a/build/error/core/Err.php b/build/error/core/Err.php new file mode 100644 index 0000000..bd7a56c --- /dev/null +++ b/build/error/core/Err.php @@ -0,0 +1,109 @@ + diff --git a/build/error/core/Error.php b/build/error/core/Error.php old mode 100755 new mode 100644 index 8e08239..70f9944 --- a/build/error/core/Error.php +++ b/build/error/core/Error.php @@ -3,148 +3,189 @@ namespace error\core; + use \error\core\Err; class Error{ - /* SUCCESS */ - const Success = 0; + private $error = null; + private $arguments = []; - /* Parsage json */ - const ParsingFailed = 1; + /* ERROR CONSTRUCTOR + * + * @error Const error + * @arg1 [OPT] Argument 1 + * @arg2 [OPT] Argument 2 + * @arg... [OPT] Argument ... + * + * @return instance Error instance + * + */ + public function __construct($const){ + call_user_func_array([$this, 'set'], func_get_args()); + } - /* ResourceDispatcher */ + /* ERROR GETTER + * + * @return Err Error + * + */ + public function get(){ return $this->error; } - // Drapeaux invalides - const InvalidFlags = 2; + /* ERROR SETTER + * + * @error Const error + * @arg1 [OPT] Argument 1 + * @arg2 [OPT] Argument 2 + * @arg... [OPT] Argument ... + * + * @return instance Error instance + * + */ + public function set($const){ + /* [1] On découpe les arguments + =========================================================*/ + /* (1) On récupère l'erreur */ + $this->error = !is_numeric($const) ? Err::UnknownError : $const; - // Fichier inexistant - const UnreachableResource = 3; - - - /* ModuleRequest */ - - // Le module n'est pas activé - const DisabledModule = 4; - - // Le @path n'est pas renseigne - const MissingPath = 5; - - // Verification de la coherence du chemin (existe dans la conf) - const WrongPathModule = 6; - - // Module non specifie dans la conf - const UnknownModule = 7; - - // Methode non specifie pour ce Module dans la conf - const UnknownMethod = 8; - - // Methode inamorcable - const UncallableMethod = 9; - - // Erreur de parametre(s) - const ParamError = 10; - - // Erreur dans le traitement - const ModuleError = 11; - - /* Repo */ - - // Verification de la coherence du chemin (existe dans la conf) - const WrongPathRepo = 12; - - // Module non specifie dans la conf - const UnknownRepo = 13; - - // Erreur dans le traitement - const RepoError = 14; - - /* Database */ - - // Erreur lors de la creation d'un objet PDO (connection) - const PDOConnection = 15; - - /* API token */ - // Token inexistant ou faux - const TokenError = 16; - - const PermissionError = 17; - - /* Erreur d'UPLOAD */ - const UploadError = 18; - - // Mauvais format de fichier - const FormatError = 19; - - /* Erreur de contenu */ - // Aucune donnée trouvée - const NoMatchFound = 20; - - /* Erreur de vues */ - // Mauvais chemin de template - const UnknownTemplate = 21; - - /* Erreur de l'ORM */ - // Table n'existe pas - const UnknownTable = 22; - - // Pas permissions de lire le schéma - const NotAllowedSchema = 23; - - /* Erreur au niveau javascript */ - //const JavascriptError = 20; // -> géré en js + /* (2) On récupère les arguments */ + $this->arguments = array_slice(func_get_args(), 1); + } /* EXPLICITE UN CODE D'ERREUR * - * @error Code d'erreur - * * @return explicit Description explicite du code d'erreur * */ - public static function explicit($error){ - switch($error){ - case self::Success: return "Tout s'est bien deroulé."; break; + public function explicit(){ + switch($this->error){ + case Err::Success: return $this->Success(); break; + case Err::ParsingFailed: return $this->ParsingFailed(); break; + case Err::UnreachableResource: return $this->UnreachableResource(); break; + case Err::UploadError: return $this->UploadError(); break; + case Err::FormatError: return $this->FormatError(); break; + case Err::TokenError: return $this->TokenError(); break; + case Err::PermissionError: return $this->PermissionError(); break; + case Err::DisabledModule: return $this->DisabledModule(); break; + case Err::MissingPath: return $this->MissingPath(); break; + case Err::WrongPathModule: return $this->WrongPathModule(); break; + case Err::UnknownModule: return $this->UnknownModule(); break; + case Err::UnknownMethod: return $this->UnknownMethod(); break; + case Err::UncallableModule: return $this->UncallableModule(); break; + case Err::UncallableMethod: return $this->UncallableMethod(); break; + case Err::UnknownHttpMethod: return $this->UnknownHttpMethod(); break; + case Err::ConfigError: return $this->ConfigError(); break; + case Err::MissingParam: return $this->MissingParam(); break; + case Err::WrongParam: return $this->WrongParam(); break; + case Err::ModuleError: return $this->ModuleError(); break; + case Err::PDOConnection: return $this->PDOConnection(); break; + case Err::WrongPathRepo: return $this->WrongPathRepo(); break; + case Err::UnknownRepo: return $this->UnknownRepo(); break; + case Err::RepoError: return $this->RepoError(); break; + case Err::UnknownTable: return $this->UnknownTable(); break; + case Err::NotAllowedSchema: return $this->NotAllowedSchema(); break; + case Err::NoMatchFound: return $this->NoMatchFound(); break; + case Err::UnknownTemplate: return $this->UnknownTemplate(); break; + case Err::UnknownAddress: return $this->UnknownAddress(); break; + case Err::UnknownError: return $this->UnknownError(); break; - case self::ParsingFailed: return "La lecture du fichier JSON ou XML a echouée."; break; - - case self::InvalidFlags: return "Les spécifications (drapeaux) sont incorrects."; break; - case self::UnreachableResource: return "La ressource n'existe pas (404)."; break; - case self::DisabledModule: return "Vous n'avez pas accès au module demandé."; break; - case self::MissingPath: return "Le chemin de délégation n'a pas été renseigné."; break; - case self::WrongPathModule: return "Le chemin de délégation est incorrect ('nomModule/nomMethode')."; break; - case self::WrongPathRepo: return "Le chemin de délégation est incorrect ('nomRepo/nomMethode')."; break; - case self::UnknownModule: return "Le module n'existe pas."; break; - case self::UnknownRepo: return "Le repo n'existe pas."; break; - case self::UnknownMethod: return "Le méthode n'existe pas."; break; - case self::UncallableMethod: return "Le méthode n'est pas amorçable."; break; - - case self::ParamError: return "Un ou plusieurs paramètres sont manquants ou incorrects."; break; - case self::ModuleError: return "Erreur lors du traitement du module."; break; - case self::RepoError: return "Erreur lors du traitement du repo."; break; - - case self::PDOConnection: return "La connexion avec la base de données a echouée."; break; - - case self::TokenError: return "Le token de connection est absent, érroné ou expiré."; break; - case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action."; break; - case self::UploadError: return "Une erreur d'upload est survenue."; break; - case self::FormatError: return "Le fichier n'est pas au bon format."; break; - - case self::NoMatchFound: return "Aucun résultat correspondant à la requête."; break; - - case self::UnknownTemplate: return "Modèle inconnu."; break; - - default: return "Erreur inconnue..."; break; + default: return $this->UnknownDebugError(); break; } - - // Erreur inconnue - return null; } - public static function setHttpCode($error){ - http_response_code( $error == self::Success ? 200 : 417 ); + private function Success(){ + return 'all right'; + }private function ParsingFailed(){ + if( count($this->arguments) > 0 ) + return $this->arguments[0].' parsing failed'; + else + return 'parsing failed'; + }private function UnreachableResource(){ + return 'unreachable resource'; + }private function UploadError(){ + return 'upload error'; + }private function FormatError(){ + return 'format error'; + }private function TokenError(){ + return 'bad or expired token'; + }private function PermissionError(){ + return 'permission error'; + }private function DisabledModule(){ + return 'disabled module'; + }private function MissingPath(){ + return 'missing path'; + }private function WrongPathModule(){ + return 'wrong module\'s path'; + }private function UnknownModule(){ + if( count($this->arguments) > 0 ) + return 'unknown module \''.$this->arguments[0].'\''; + else + return 'unknown module'; + }private function UnknownMethod(){ + if( count($this->arguments) > 0 ) + return 'unknown method \''.$this->arguments[0].'\''; + else + return 'unknown method'; + }private function UncallableModule(){ + if( count($this->arguments) > 0 ) + return 'uncallable module \''.$this->arguments[0].'\''; + else + return 'uncallable module'; + }private function UncallableMethod(){ + if( count($this->arguments) > 0 ) + return 'uncallable method \''.$this->arguments[0].'\''; + else + return 'uncallable method'; + }private function UnknownHttpMethod(){ + return 'unknown HTTP method'; + }private function ConfigError(){ + return 'configuration error'; + }private function MissingParam(){ + if( count($this->arguments) > 0 ) + return 'missing param \''.$this->arguments[0].'\''; + else + return 'missing param'; + }private function WrongParam(){ + if( count($this->arguments) > 0 ) + if( count($this->arguments) > 1 ) + return 'wrong param \''.$this->arguments[0].'\' expected to be of type \''.$this->arguments[1].'\''; + else + return 'wrong param \''.$this->arguments[0].'\''; + else + return 'wrong param'; + }private function ModuleError(){ + return 'module error'; + }private function PDOConnection(){ + return 'database error'; + }private function WrongPathRepo(){ + return 'wrong repository\'s path'; + }private function UnknownRepo(){ + return 'unknown repository'; + }private function RepoError(){ + return 'repository error'; + }private function UnknownTable(){ + return 'unknown table'; + }private function NotAllowedSchema(){ + return 'schema browsing not allowed'; + }private function NoMatchFound(){ + return 'no match found'; + }private function UnknownTemplate(){ + return 'unknown template'; + }private function UnknownAddress(){ + return 'unknown'; + }private function UnknownError(){ + return 'unknown error'; + }private function UnknownDebugError(){ + return 'unknown debug error'; + } + + + public function setHttpCode(){ + http_response_code( $this->error == Err::Success ? 200 : 417 ); } } + ?> diff --git a/build/http/core/HttpRequest.php b/build/http/core/HttpRequest.php new file mode 100644 index 0000000..de3a294 --- /dev/null +++ b/build/http/core/HttpRequest.php @@ -0,0 +1,198 @@ + auto-filled HTTP Request + * + =========================================================*/ + public function __construct(){ + /* [1] Define URI & Status Code & method + =========================================================*/ + $this->uri = $_SERVER['REQUEST_URI']; + $this->method = $_SERVER['REQUEST_METHOD']; + + + /* [2] Define headers + =========================================================*/ + $this->headers = \getallheaders(); + + + /* [3] Define default datasets (GET, POST) + =========================================================*/ + $this->getdata = $_GET; + $this->postdata = $_POST; + + + /* [4] Define BODY & its type + =========================================================*/ + /* (1) Default: set plain/text body */ + $this->body = \file_get_contents('php://input'); + + /* (2) Fetch content type */ + $this->type = self::getContentType($this->headers['Content-Type']); + + + /* [5] Parse BODY data -> POST + =========================================================*/ + $this->parseBody(); + } + + + + /* GET CONSTANT CT_* FROM `Content-Type` HEADER + * + * @pContentType `Content-Type` header value + * + * @return type Constant value + * + */ + private static function getContentType($pContentType=null){ + /* [1] Checks argv + =========================================================*/ + if( is_null($pContentType) ) + $pContentType = $_SERVER['CONTENT_TYPE']; + + + /* [2] Checks types + =========================================================*/ + /* (1) Form Data Types + ---------------------------------------------------------*/ + /* (1) multipart/form-data */ + if( preg_match('/^multipart\/form\-data; boundary=(.+)$/i', $pContentType) ) + return self::CT_MULTIPART_FORM_DATA; + + /* (2) application/x-www-form-urlencoded */ + if( preg_match('/^application\/x\-www\-form\-urlencoded/i', $pContentType) ) + return self::CT_X_WWW_FORM_URLENCODED; + + + /* (2) Data types + ---------------------------------------------------------*/ + /* (1) Basic JSON content type */ + if( preg_match('/^application\/json/i', $pContentType) ) + return self::CT_JSON; + + /* (2) Basic YAML content type */ + if( preg_match('/^application\/yaml/i', $pContentType) ) + return self::CT_YAML; + + /* (3) Basic TEXT content type */ + if( preg_match('/text\/[a-z]+/', $pContentType) ) + return self::CT_TEXT; + + + /* (3) Default Type + ---------------------------------------------------------*/ + return self::CT_BINARY; + + } + + + + /* PARSES BODY DATA + * + */ + private function parseBody(){ + /* [1] If empty body -> do nothing + =========================================================*/ + if( strlen($this->body) === 0 ) + return true; + + + /* [2] Management for each ContentType + =========================================================*/ + switch($this->type){ + + /* (1) multipart/form-data -> parse for not-POST methods + ---------------------------------------------------------*/ + case self::CT_MULTIPART_FORM_DATA: + /* (1) Fetch the boundary */ + if( !preg_match('/boundary=(.+)$/i', $this->headers['Content-Type'], $match) ) + return false; + + $boundary = $match[1]; + + /* (2) Break body into parts */ + $splitter = "/(?:\n|\r\n|--)*$boundary(?:\n|\r\n|--)?/im"; + $parts = preg_split($splitter, $this->body); + + /* (3) Process parts */ + foreach($parts as $part) + if( preg_match('/^Content\-Disposition: form\-data; name=\"([^"]+)\"(?:\n|\r\n){2}(.+)$/mi', $part, $match) ) + $this->postdata[$match[1]] = $match[2]; + + /* (4) Erases body */ + $this->body = ''; + break; + + + /* (2) application/x-www-form-urlencoded -> parse for not-POST methods + ---------------------------------------------------------*/ + case self::CT_X_WWW_FORM_URLENCODED: + /* Auto parse builtin-php function */ + parse_str($this->body, $this->postdata); + + /* Erases body */ + $this->body = ''; + break; + + + /* (3) application/json -> parse if no error + ---------------------------------------------------------*/ + case self::CT_JSON: + /* (1) Decode body content */ + $decoded = json_decode($this->body, true); + + /* (2) If error -> do nothing */ + if( is_null($decoded) ) + return; + + /* (3) Parse body into body */ + $this->body = $decoded; + break; + + + /* (4) application/yaml -> parse if no error + ---------------------------------------------------------*/ + case self::CT_YAML: + + break; + } + } + + + public function BODY(){ return $this->body; } + public function POST(){ return $this->postdata; } + public function GET(){ return $this->getdata; } + public function HEADERS(){ return $this->headers; } + public function METHOD(){ return $this->method; } + public function URI(){ return $this->uri; } + } diff --git a/build/viewer/core/Viewer.php b/build/viewer/core/Viewer.php index 00934ff..68297c6 100755 --- a/build/viewer/core/Viewer.php +++ b/build/viewer/core/Viewer.php @@ -3,10 +3,11 @@ namespace viewer\core; use \error\core\Error; + use \error\core\Err; class Viewer{ - public $error = Error::Success; + public $error; private $template; @@ -25,9 +26,12 @@ * */ public function __construct($template, $args){ + $this->error = new Error(Err::Success); + + // Si pas parametre manquant, on quitte if( $template == null ){ - $this->error = Error::MissingPath; + $this->error = new Error(Err::MissingPath); return false; } @@ -94,7 +98,7 @@ /* [1] On vérifie le format =========================================================*/ if( !preg_match('/^(\w+)\.(\w+)$/i', $template, $match) ){ - $this->error = Error::ParamError; + $this->error = new Error(Err::ParamError); return false; } @@ -106,13 +110,13 @@ /* (1) On vérifie que la classe existe */ if( !class_exists($class) ){ - $this->error = Error::UnknownTemplate; + $this->error = new Error(Err::UnknownTemplate); return false; } /* (2) On vérifie que la méthode existe */ if( !method_exists($class, $method) ){ - $this->error = Error::UnknownTemplate; + $this->error = new Error(Err::UnknownTemplate); return false; } diff --git a/build/viewer/view/group/group_choice.php b/build/viewer/view/group/group_choice.php index 7de3ec9..f9e30fd 100755 --- a/build/viewer/view/group/group_choice.php +++ b/build/viewer/view/group/group_choice.php @@ -1,8 +1,9 @@ addFunction(new \Twig_Function('f_clusters', function($class){ /* (1) On récupère les groupes */ - $getClustersReq = new ModuleRequest('clusterDefault/getAll', ['class' => $class]); + $getClustersReq = new Request('clusterDefault/getAll', ['class' => $class]); $getClusters = $getClustersReq->dispatch(); /* (2) si erreur, on retourne rien par défaut */ - if( $getClusters->error != Error::Success ) + if( $getClusters->error->get() != Err::Success ) return []; /* (3) On enregistre le résultat */ diff --git a/build/viewer/view/group/group_choice.twig b/build/viewer/view/group/group_choice.twig old mode 100644 new mode 100755 diff --git a/build/viewer/view/group/members_choice.php b/build/viewer/view/group/members_choice.php old mode 100644 new mode 100755 index cbe1b56..acc0dba --- a/build/viewer/view/group/members_choice.php +++ b/build/viewer/view/group/members_choice.php @@ -2,7 +2,8 @@ namespace viewer\view\group; use \viewer\core\Viewer; - use \api\core\ModuleRequest; + use \api\core\Request; + use \error\core\Err; use \error\core\Error; use \api\core\Authentification; @@ -16,14 +17,14 @@ return Viewer::$htmlError; /* (2) On récupère le groupe */ - $checktypeRequest = new ModuleRequest('clusterDefault/getById', [ + $checktypeRequest = new Request('clusterDefault/getById', [ 'id_cluster' => $params['id_cluster'], 'class' => $params['class'] ]); $checktypeResponse = $checktypeRequest->dispatch(); /* (3) Si on ne le trouve pas, on retourne une erreur */ - if( $checktypeResponse->error != Error::Success ) + if( $checktypeResponse->error->get() != Err::Success ) return Viewer::$htmlError; /* (4) On récupère les données du groupe */ @@ -52,14 +53,14 @@ =========================================================*/ /* (1) On exécute la requête */ - $getmembersRequest = new ModuleRequest('clusterDefault/getMembers', [ + $getmembersRequest = new Request('clusterDefault/getMembers', [ 'id_cluster' => $id_cluster, 'class' => $class ]); $getmembersResponse = $getmembersRequest->dispatch(); /* (2) Si erreur, on retourne rien par défaut */ - if( $getmembersResponse->error != Error::Success ) + if( $getmembersResponse->error->get() != Err::Success ) return []; /* (3) On récupère la liste des UID uniquement */ @@ -74,12 +75,12 @@ if( $class == 0 ){ /* (2) On exécute la requête */ - $getusersRequest = new ModuleRequest('userDefault/getAll'); + $getusersRequest = new Request('userDefault/getAll'); // On recupere la reponse $getusersResponse = $getusersRequest->dispatch(); /* (3) si erreur, on affiche l'explicitation */ - if( $getusersResponse->error != Error::Success ) + if( $getusersResponse->error->get() != Err::Success ) return []; /* (4) On récupère la liste des utilisateurs */ @@ -97,12 +98,12 @@ }else{ /* (2) On exécute la requête */ - $getmachinesRequest = new ModuleRequest('machineDefault/getAll'); + $getmachinesRequest = new Request('machineDefault/getAll'); // On recupere la reponse $getmachinesResponse = $getmachinesRequest->dispatch(); /* (3) si erreur, on affiche l'explicitation */ - if( $getmachinesResponse->error != Error::Success ) + if( $getmachinesResponse->error->get() != Err::Success ) return []; /* (4) On récupère la liste des machines */ diff --git a/build/viewer/view/group/members_choice.twig b/build/viewer/view/group/members_choice.twig old mode 100644 new mode 100755 diff --git a/build/viewer/view/group/permission.php b/build/viewer/view/group/permission.php index f61fd03..47e3e89 100755 --- a/build/viewer/view/group/permission.php +++ b/build/viewer/view/group/permission.php @@ -2,8 +2,9 @@ namespace viewer\view\group; use \viewer\core\Viewer; - use \api\core\ModuleRequest; + use \api\core\Request; use \api\core\Authentification; + use \error\core\Err; use \error\core\Error; class permission{ @@ -32,14 +33,14 @@ /* [3] Store functions =========================================================*/ $twig->addFunction(new \Twig_Function('f_clusters', function(){ - $request = new ModuleRequest('clusterDefault/getAll', [ + $request = new Request('clusterDefault/getAll', [ 'class' => 1 ]); $answer = $request->dispatch(); // si erreur, on affiche rien par défaut - if( $answer->error != Error::Success ) + if( $answer->error->get() != Err::Success ) return []; return $answer->get('clusters'); @@ -47,7 +48,7 @@ })); $twig->addFunction(new \Twig_Function('f_nbmachines', function($id_cluster){ - $machineReq = new ModuleRequest('clusterDefault/getMembers', [ + $machineReq = new Request('clusterDefault/getMembers', [ 'id_cluster' => (int) $id_cluster, 'class' => 1 ]); @@ -55,26 +56,26 @@ $machineRes = $machineReq->dispatch(); // si erreur, on affiche rien par défaut - if( $machineRes->error != Error::Success ) + if( $machineRes->error->get() != Err::Success ) return []; return count($machineRes->get('members')); })); $twig->addFunction(new \Twig_Function('f_permissions', function(){ - $permReq = new ModuleRequest('clusterDefault/getPermissions', []); + $permReq = new Request('clusterDefault/getPermissions', []); $permRes = $permReq->dispatch(); // si erreur, on affiche rien par défaut - if( $permRes->error != Error::Success ) + if( $permRes->error->get() != Err::Success ) return []; return $permRes->get('permissions'); })); $twig->addFunction(new \Twig_Function('f_userclusters', function($id_cluster, $id_permission){ - $ucReq = new ModuleRequest('clusterDefault/getAuthenticatedClusters', [ + $ucReq = new Request('clusterDefault/getAuthenticatedClusters', [ 'id_target' => $id_cluster, 'id_action' => $id_permission ]); @@ -82,7 +83,7 @@ $ucRes = $ucReq->dispatch(); // si erreur, on affiche rien par défaut - if( $ucRes->error != Error::Success ) + if( $ucRes->error->get() != Err::Success ) return []; return $ucRes->get('clusters'); diff --git a/build/viewer/view/group/permission.twig b/build/viewer/view/group/permission.twig old mode 100644 new mode 100755 diff --git a/build/viewer/view/group/view.php b/build/viewer/view/group/view.php index bb8fc29..b704f0f 100755 --- a/build/viewer/view/group/view.php +++ b/build/viewer/view/group/view.php @@ -1,8 +1,9 @@ addFunction(new \Twig_Function('f_clusters', function($class){ /* (1) On récupère les groupes */ - $getClustersReq = new ModuleRequest('clusterDefault/getAll', ['class' => $class]); + $getClustersReq = new Request('clusterDefault/getAll', ['class' => $class]); $getClusters = $getClustersReq->dispatch(); /* (2) si erreur, on retourne rien par défaut */ - if( $getClusters->error != Error::Success ) + if( $getClusters->error->get() != Err::Success ) return []; /* (3) On enregistre le résultat */ @@ -43,7 +44,7 @@ })); $twig->addFunction(new \Twig_Function('f_members', function($id_cluster, $class){ - $membersReq = new ModuleRequest('clusterDefault/getMembers', [ + $membersReq = new Request('clusterDefault/getMembers', [ 'id_cluster' => (int) $id_cluster, 'class' => $class ]); @@ -51,7 +52,7 @@ $membersRes = $membersReq->dispatch(); // // si erreur, on affiche rien par défaut - if( $membersRes->error != Error::Success ) + if( $membersRes->error->get() != Err::Success ) return []; return $membersRes->get('members'); diff --git a/build/viewer/view/group/view.twig b/build/viewer/view/group/view.twig old mode 100644 new mode 100755 diff --git a/build/viewer/view/history/view.php b/build/viewer/view/history/view.php old mode 100644 new mode 100755 index 53c501a..f6badbd --- a/build/viewer/view/history/view.php +++ b/build/viewer/view/history/view.php @@ -2,8 +2,9 @@ namespace viewer\view\history; - use \api\core\ModuleRequest; + use \api\core\Request; use \error\core\Error; + use \error\core\Err; class view{ @@ -24,12 +25,12 @@ /* [3] Store functions =========================================================*/ $twig->addFunction(new \Twig_Function('f_history', function(){ - $req = new ModuleRequest('historyDefault/getAll', []); + $req = new Request('historyDefault/getAll', []); $res = $req->dispatch(); // si erreur, on retourne rien par défaut - if( $res->error != Error::Success ) + if( $res->error->get() != Err::Success ) return []; return $res->get('history'); diff --git a/build/viewer/view/history/view.twig b/build/viewer/view/history/view.twig old mode 100644 new mode 100755 diff --git a/build/viewer/view/machine/groups.php b/build/viewer/view/machine/groups.php index cbea892..4855de6 100755 --- a/build/viewer/view/machine/groups.php +++ b/build/viewer/view/machine/groups.php @@ -2,9 +2,10 @@ namespace viewer\view\machine; use \viewer\core\Viewer; - use \api\core\ModuleRequest; + use \api\core\Request; use \api\core\Authentification; use \error\core\Error; + use \error\core\Err; class groups{ @@ -31,14 +32,14 @@ /* [3] Store functions =========================================================*/ $twig->addFunction(new \Twig_Function('f_clusters', function(){ - $request = new ModuleRequest('clusterDefault/getAll', [ + $request = new Request('clusterDefault/getAll', [ 'class' => 1 ]); $answer = $request->dispatch(); // si erreur, on affiche rien par défaut - if( $answer->error != Error::Success ) + if( $answer->error->get() != Err::Success ) return []; return $answer->get('clusters'); @@ -46,14 +47,14 @@ })); $twig->addFunction(new \Twig_Function('f_machines', function($id_cluster){ - $usersReq = new ModuleRequest('clusterDefault/getMembers', [ + $usersReq = new Request('clusterDefault/getMembers', [ 'id_cluster' => (int) $id_cluster, 'class' => 1 ]); $usersRes = $usersReq->dispatch(); // si erreur, on affiche rien par défaut - if( $usersRes->error != Error::Success ) + if( $usersRes->error->get() != Err::Success ) return []; return $usersRes->get('members'); diff --git a/build/viewer/view/machine/groups.twig b/build/viewer/view/machine/groups.twig old mode 100644 new mode 100755 diff --git a/build/viewer/view/machine/view.php b/build/viewer/view/machine/view.php index d7ccfed..7b5e5eb 100755 --- a/build/viewer/view/machine/view.php +++ b/build/viewer/view/machine/view.php @@ -2,9 +2,9 @@ namespace viewer\view\machine; use \viewer\core\Viewer; - use \api\core\ModuleRequest; - use \api\core\Authentification; + use \api\core\Request; use \error\core\Error; + use \error\core\Err; class view{ @@ -30,24 +30,24 @@ /* [3] Store functions =========================================================*/ $twig->addFunction(new \Twig_Function('f_machines', function(){ - $request = new ModuleRequest('machineDefault/getAll'); // On utilise la methode 'getAll' du module 'machineDefault' + $request = new Request('machineDefault/getAll'); // On utilise la methode 'getAll' du module 'machineDefault' $answer = $request->dispatch(); // On recupere la reponse // si erreur, on affiche rien par défaut - if( $answer->error != Error::Success ) + if( $answer->error->get() != Err::Success ) return []; return $answer->get('machines'); })); $twig->addFunction(new \Twig_Function('f_clusters', function($id_machine){ - $clustersReq = new ModuleRequest('machineDefault/getClusters', [ + $clustersReq = new Request('machineDefault/getClusters', [ 'id_machine' => (int) $id_machine ]); $clustersRes = $clustersReq->dispatch(); // si erreur, on affiche rien par défaut - if( $clustersRes->error != Error::Success ) + if( $clustersRes->error->get() != Err::Success ) return []; return $clustersRes->get('clusters'); diff --git a/build/viewer/view/machine/view.twig b/build/viewer/view/machine/view.twig old mode 100644 new mode 100755 diff --git a/build/viewer/view/user/groups.php b/build/viewer/view/user/groups.php index f26af91..3ea17c2 100755 --- a/build/viewer/view/user/groups.php +++ b/build/viewer/view/user/groups.php @@ -2,9 +2,10 @@ namespace viewer\view\user; use \viewer\core\Viewer; - use \api\core\ModuleRequest; + use \api\core\Request; use \api\core\Authentification; use \error\core\Error; + use \error\core\Err; class groups{ @@ -31,14 +32,14 @@ /* [3] Store functions =========================================================*/ $twig->addFunction(new \Twig_Function('f_clusters', function(){ - $request = new ModuleRequest('clusterDefault/getAll', [ + $request = new Request('clusterDefault/getAll', [ 'class' => 0 ]); $answer = $request->dispatch(); // si erreur, on affiche rien par défaut - if( $answer->error != Error::Success ) + if( $answer->error->get() != Err::Success ) return []; return $answer->get('clusters'); @@ -46,14 +47,14 @@ })); $twig->addFunction(new \Twig_Function('f_users', function($id_cluster){ - $usersReq = new ModuleRequest('clusterDefault/getMembers', [ + $usersReq = new Request('clusterDefault/getMembers', [ 'id_cluster' => (int) $id_cluster, 'class' => 0 ]); $usersRes = $usersReq->dispatch(); // si erreur, on affiche rien par défaut - if( $usersRes->error != Error::Success ) + if( $usersRes->error->get() != Err::Success ) return []; return $usersRes->get('members'); diff --git a/build/viewer/view/user/groups.twig b/build/viewer/view/user/groups.twig old mode 100644 new mode 100755 diff --git a/build/viewer/view/user/view.php b/build/viewer/view/user/view.php index c801dcb..5698141 100755 --- a/build/viewer/view/user/view.php +++ b/build/viewer/view/user/view.php @@ -1,9 +1,10 @@ addFunction(new \Twig_Function('f_users', function(){ - $request = new ModuleRequest('userDefault/getAll'); // On utilise la methode 'getAll' du module 'userDefault' + $request = new Request('userDefault/getAll'); // On utilise la methode 'getAll' du module 'userDefault' $answer = $request->dispatch(); // On recupere la reponse // si erreur, on affiche rien - if( $answer->error != Error::Success ) + if( $answer->error->get() != Err::Success ) return []; return $answer->get('users'); })); $twig->addFunction(new \Twig_Function('f_clusters', function($id_user){ - $clustersReq = new ModuleRequest('userDefault/getClusters', [ 'id_user' => $id_user ]); + $clustersReq = new Request('userDefault/getClusters', [ 'id_user' => $id_user ]); $clustersRes = $clustersReq->dispatch(); /* (2) Gestion si erreur */ - if( $clustersRes->error != Error::Success ) + if( $clustersRes->error->get() != Err::Success ) return []; return $clustersRes->get('clusters'); diff --git a/build/viewer/view/user/view.twig b/build/viewer/view/user/view.twig old mode 100644 new mode 100755 diff --git a/config/modules.json b/config/modules.json index fe4d094..b196c86 100755 --- a/config/modules.json +++ b/config/modules.json @@ -1,20 +1,20 @@ { "module": { - "method": { + "POST::method": { "description": "Test de l'API", - "permissions": ["warehouse"], + "permissions": [], "parameters": {} }, - "markdown": { + "POST::markdown": { "description": "Retourne une description en markdown des différents modules de l'API", "permissions": ["warehouse", "admin"], "options": { "download": true }, "parameters": {} }, - "apiBlueprint": { + "POST::apiBlueprint": { "description": "Retourne une documentation de l'API au format API Blueprint.", "permissions": ["warehouse", "admin"], "options": { "download": true }, @@ -25,7 +25,7 @@ "upload": { - "call_log": { + "POST::call_log": { "description": "Upload d'un journal d'appel au format .xml. Retour des données de call_log/unserialize", "permissions": ["admin"], "parameters": { @@ -42,7 +42,7 @@ "download": { - "multiple": { + "POST::multiple": { "description": "Download des données relatives aux sujets donnés.", "permissions": ["admin"], "options": { "download": true }, @@ -58,7 +58,7 @@ "authentificationDefault": { - "warehouse": { + "POST::warehouse": { "description": "Connexion de premier niveau : entrepot.", "permissions": [], "parameters": { @@ -70,7 +70,7 @@ } }, - "admin": { + "POST::admin": { "description": "Connexion de second niveau : administrateur.", "permissions": ["warehouse"], "parameters": { @@ -86,7 +86,7 @@ "userDefault": { - "create": { + "POST::create": { "description": "Création d'un nouvel utilisateur.", "permissions": ["warehouse", "admin"], "parameters": { @@ -101,7 +101,7 @@ } }, - "link": { + "POST::link": { "description": "Ajout d'un utilisateur à un groupe.", "permissions": ["warehouse", "admin"], "parameters": { @@ -112,7 +112,7 @@ }, - "unlink": { + "POST::unlink": { "description": "Retrait d'un utilisateur d'un groupe", "permissions": ["warehouse", "admin"], "parameters": { @@ -122,7 +122,7 @@ "output": {} }, - "search": { + "POST::search": { "description": "Recherche d'un utilisateur par mots-clés.", "permissions": ["warehouse", "admin"], "parameters": { @@ -133,7 +133,7 @@ } }, - "getAll": { + "POST::getAll": { "description": "Liste de tous les utilisateurs", "permissions": ["warehouse", "admin"], "parameters": {}, @@ -142,7 +142,7 @@ } }, - "getById": { + "POST::getById": { "description": "Retourne un utilisateur spécifique.", "permissions": ["warehouse", "admin"], "parameters": { @@ -153,7 +153,7 @@ } }, - "getByCode": { + "POST::getByCode": { "description": "Retourne un utilisateur de Code RFID donné.", "permissions": ["warehouse", "admin"], "parameters": { @@ -164,7 +164,7 @@ } }, - "getByUsername": { + "POST::getByUsername": { "description": "Retourne un utilisateur d'identifiant donné.", "permissions": ["warehouse", "admin"], "parameters": { @@ -175,7 +175,7 @@ } }, - "getClusters": { + "POST::getClusters": { "description": "Retourne les groupes d'un utilisateur.", "permissions": ["warehouse", "admin"], "parameters": { @@ -186,7 +186,7 @@ } }, - "edit": { + "POST::edit": { "description": "Modifie les attributs d'un utilisateur.", "permissions": ["warehouse", "admin"], "parameters": { @@ -205,7 +205,7 @@ } }, - "delete": { + "POST::delete": { "description": "Suppression d'un utilisateur.", "permissions": ["warehouse", "admin"], "parameters": { @@ -221,7 +221,7 @@ "machineDefault": { - "sync": { + "POST::sync": { "description": "Synchronisation d'une machine.", "permissions": ["warehouse"], "parameters": { @@ -234,7 +234,7 @@ } }, - "init": { + "POST::init": { "description": "Données d'initialisation d'une machine.", "permissions": ["warehouse"], "parameters": { @@ -245,7 +245,7 @@ } }, - "create": { + "POST::create": { "description": "Création d'une nouvelle machine.", "permissions": ["warehouse", "admin"], "parameters": { @@ -256,7 +256,7 @@ } }, - "link": { + "POST::link": { "description": "Ajout d'une machine à un groupe.", "permissions": ["warehouse", "admin"], "parameters": { @@ -266,7 +266,7 @@ "output": {} }, - "unlink": { + "POST::unlink": { "description": "Retrait d'une machine d'un groupe.", "permissions": ["warehouse", "admin"], "parameters": { @@ -276,7 +276,7 @@ "output": {} }, - "search": { + "POST::search": { "description": "Recherche une machine par mots-clés.", "permissions": ["warehouse", "admin"], "parameters": { @@ -287,7 +287,7 @@ } }, - "getAll": { + "POST::getAll": { "description": "Retourne la liste de toutes les machines.", "permissions": ["warehouse", "admin"], "parameters": {}, @@ -296,7 +296,7 @@ } }, - "getById": { + "POST::getById": { "description": "Retourne les données d'une machine.", "permissions": ["warehouse", "admin"], "parameters": { @@ -307,7 +307,7 @@ } }, - "getByName": { + "POST::getByName": { "description": "Retourne les données d'une machine de nom donné.", "permissions": ["warehouse", "admin"], "parameters": { @@ -318,7 +318,7 @@ } }, - "getClusters": { + "POST::getClusters": { "description": "Retourne les groupes d'une machine.", "permissions": ["warehouse", "admin"], "parameters": { @@ -329,7 +329,7 @@ } }, - "edit": { + "POST::edit": { "description": "Modifie les attributs d'une machine.", "permissions": ["warehouse", "admin"], "parameters": { @@ -339,7 +339,7 @@ "output": {} }, - "delete": { + "POST::delete": { "description": "Supprime une machine.", "permissions": ["warehouse", "admin"], "parameters": { @@ -355,7 +355,7 @@ "clusterDefault": { - "create": { + "POST::create": { "description": "Création d'un nouveau groupe.", "permissions": ["warehouse", "admin"], "parameters": { @@ -367,7 +367,7 @@ } }, - "search": { + "POST::search": { "description": "Recherche d'un groupe par mots-clés.", "permissions": ["warehouse", "admin"], "parameters": { @@ -379,7 +379,7 @@ } }, - "getAll": { + "POST::getAll": { "description": "Liste de tous les groupes", "permissions": ["warehouse", "admin"], "parameters": { @@ -391,7 +391,7 @@ } }, - "getById": { + "POST::getById": { "description": "Retourne un groupe spécifique.", "permissions": ["warehouse", "admin"], "parameters": { @@ -403,7 +403,7 @@ } }, - "getByName": { + "POST::getByName": { "description": "Retourne un groupe de nom donné.", "permissions": ["warehouse", "admin"], "parameters": { @@ -415,7 +415,7 @@ } }, - "getMembers": { + "POST::getMembers": { "description": "Retourne les membres d'un groupe.", "permissions": ["warehouse", "admin"], "parameters": { @@ -427,7 +427,7 @@ } }, - "edit": { + "POST::edit": { "description": "Modifie le nom d'un groupe.", "permissions": ["warehouse", "admin"], "parameters": { @@ -440,7 +440,7 @@ } }, - "delete": { + "POST::delete": { "description": "Suppression d'un groupe.", "permissions": ["warehouse", "admin"], "parameters": { @@ -452,7 +452,7 @@ } }, - "addPermission": { + "POST::addPermission": { "description": "Ajout d'une permission", "permissions": ["warehouse", "admin"], "parameters": { @@ -463,7 +463,7 @@ "output": {} }, - "remPermission": { + "POST::remPermission": { "description": "Suppression d'une permission", "permissions": ["warehouse", "admin"], "parameters": { @@ -474,7 +474,7 @@ "output": {} }, - "getPermissions": { + "POST::getPermissions": { "description": "Retourne la liste des permissions", "permissions": ["warehouse","admin"], "parameters": {}, @@ -483,7 +483,7 @@ } }, - "getAuthenticatedClusters": { + "POST::getAuthenticatedClusters": { "description": "Retourne les groupes d'utilisateurs ayant une action sur un groupe de machine.", "permissions": ["warehouse","admin"], "parameters": { @@ -498,7 +498,7 @@ }, "historyDefault": { - "getAll": { + "POST::getAll": { "description": "Retourne l'historique complet", "permissions": ["warehouse", "admin"], "parameters": {}, diff --git a/lib/composer.json b/lib/composer.json old mode 100644 new mode 100755 diff --git a/lib/composer.lock b/lib/composer.lock old mode 100644 new mode 100755 diff --git a/public_html/css/font.scss b/public_html/css/font.scss old mode 100644 new mode 100755 diff --git a/public_html/css/font/Open Sans/Apache License.txt b/public_html/css/font/Open Sans/Apache License.txt old mode 100644 new mode 100755 diff --git a/public_html/css/font/Open Sans/L.ttf b/public_html/css/font/Open Sans/L.ttf old mode 100644 new mode 100755 diff --git a/public_html/css/font/Open Sans/Li.ttf b/public_html/css/font/Open Sans/Li.ttf old mode 100644 new mode 100755 diff --git a/public_html/css/font/Open Sans/R.ttf b/public_html/css/font/Open Sans/R.ttf old mode 100644 new mode 100755 diff --git a/public_html/css/font/Open Sans/SB.ttf b/public_html/css/font/Open Sans/SB.ttf old mode 100644 new mode 100755 diff --git a/public_html/css/font/Open Sans/b.ttf b/public_html/css/font/Open Sans/b.ttf old mode 100644 new mode 100755 diff --git a/public_html/css/font/Open Sans/bi.ttf b/public_html/css/font/Open Sans/bi.ttf old mode 100644 new mode 100755 diff --git a/public_html/css/font/Open Sans/i.ttf b/public_html/css/font/Open Sans/i.ttf old mode 100644 new mode 100755 diff --git a/public_html/css/min/fonts.css b/public_html/css/min/fonts.css old mode 100644 new mode 100755 diff --git a/public_html/index.php b/public_html/index.php index e5d1398..7314919 100755 --- a/public_html/index.php +++ b/public_html/index.php @@ -4,11 +4,9 @@ debug(); use \router\core\Router; - - use \api\core\ModuleRequest; - use \api\core\ModuleResponse; + use \api\core\Request; + use \api\core\Response; use \database\core\DatabaseDriver; - use \error\core\Error; use \api\core\Authentification; @@ -26,8 +24,10 @@ /* [1] Gestion des authentifications et des droits =========================================================*/ /* (1) On met à jour l'authentification et les permissions */ - Authentification::check(); - $auth = Authentification::auth(); + $authsys = new Authentification(); + $auth = $authsys::auth(); + + Request::setAuthSystem($authsys); /* (2) On définit la page d'accueil */ @@ -87,7 +87,7 @@ // logout from admin $R->get('logout/?', function(){ - (new ModuleRequest('authentificationDefault/admin', ['username' => '0', 'password' => '']))->dispatch(); + (new Request('authentificationDefault/admin', ['username' => '0', 'password' => '']))->dispatch(); header('Location: /'); }); @@ -109,7 +109,7 @@ // warehouse logout $R->get('logout/?', function(){ - (new ModuleRequest('authentificationDefault/warehouse', ['name' => '000', 'password' => '']))->dispatch(); + (new Request('authentificationDefault/warehouse', ['name' => '000', 'password' => '']))->dispatch(); header('Location: /'); }); @@ -133,12 +133,12 @@ /* (4) api/module/method -> Api */ - $R->post('api(?:/(.*))/?', function($url){ - $request = ModuleRequest::fromPost($url, $_POST); + $R->post('api(?:(/.*))/?', function($url){ + $request = Request::remote($url[0], $_POST); $answer = $request->dispatch(); // Si c'est une réponse (et non un download) - if( $answer instanceof ModuleResponse ){ + if( $answer instanceof Response ){ header('Content-Type: application/json; charset=UTF-8'); echo $answer->serialize(); } diff --git a/public_html/test/client/interface.php b/public_html/test/client/interface.php index eaa76ae..c7f7d59 100755 --- a/public_html/test/client/interface.php +++ b/public_html/test/client/interface.php @@ -1,17 +1,17 @@ - @@ -21,402 +21,402 @@ - - - Virtual Client + + + Virtual Client - - - - - - - + #machine-box > #r1.active, + #machine-box > #r2.active{ + font-weight: bold; + color: #18eea9; + } - - + #card-stack{ + position: absolute; + top: 50%; + left: 20%; + width: 20em; + height: 35em; + + transform: translateX(-50%) translateY(-50%); + } + + #card-stack > .card{ + display: inline-block; + position: relative; + width: 100%; + height: 4em; + margin-bottom: .2em; + + border-radius: 10px 10px 0 0; + box-shadow: 0 2px 10px #111; + + background: #eee; + + color: #333; + font-weight: bold; + line-height: 4em; + text-align: center; + + transition: all .2s ease-in-out; + + cursor: pointer; + } + + #card-stack > .card:hover{ + background: #fff; + color: #000; + } + + #card-stack > .card.active{ + background: #aaa; + color: #000; + } + + #card-stack > input{ + display: inline-block; + position: relative; + width: calc( 100% - 1em*2 ); + height: calc( 3em - 1em*2 ); + padding: 1em; + margin-bottom: 2em; + + border-radius: 3px; + border: 0; + + background: #eee; + } + + #sync-button, + #card-pass{ + position: absolute; + top: calc( 50% + 29em ); + left: 60%; + padding: 1.5em; + + border-radius: 3px; + border: 2px solid #fff; + + background: #1ee18e; + + color: #fff; + font-weight: bold; + letter-spacing: .15em; + text-transform: uppercase; + + transition: all .2s ease-in-out; + + transform: translateX(-50%) translateY(-50%); + + cursor: pointer; + } + + #card-pass{ + top: calc( 40% + 29em ); + background: #3595ce; + } + + #sync-button:hover{ + background: #1ac47c; + } + + #card-pass:hover{ + background: #2d7dad; + } -
-
-
r1
-
r2
-
+ + + + -
- -
AB-CD-EF-GH
-
10-FE-BD-61
-
92-55-B9-B3
-
+
+
+
r1
+
r2
+
- - +
+ +
AB-CD-EF-GH
+
10-FE-BD-61
+
92-55-B9-B3
+
+ + + + - - + + diff --git a/public_html/view/admin.php b/public_html/view/admin.php index 0e40a74..869f0dc 100755 --- a/public_html/view/admin.php +++ b/public_html/view/admin.php @@ -152,7 +152,7 @@ api.send(request, function(response){ // Si erreur de module - if( response.ModuleError != 0 ){ + if( response.error != 0 ){ errBox.innerHTML = 'Format des champs incorrect.'; aPassword.value = ''; return false; @@ -189,7 +189,7 @@ /* (2) On envoie la requête */ api.send(request, function(response){ - if( response.ModuleError == 0 ){ + if( response.error == 0 ){ if( response.status == false ) document.location = '/'; } diff --git a/public_html/view/analytics.php b/public_html/view/analytics.php index 1048797..275eea4 100755 --- a/public_html/view/analytics.php +++ b/public_html/view/analytics.php @@ -1,7 +1,6 @@ diff --git a/public_html/view/css/admin.css b/public_html/view/css/admin.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/analytics.css b/public_html/view/css/analytics.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/groups.css b/public_html/view/css/groups.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/history.css b/public_html/view/css/history.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/machines.css b/public_html/view/css/machines.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/profile.css b/public_html/view/css/profile.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/settings.css b/public_html/view/css/settings.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/users.css b/public_html/view/css/users.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/view.css b/public_html/view/css/view.css old mode 100644 new mode 100755 diff --git a/public_html/view/css/warehouse.css b/public_html/view/css/warehouse.css old mode 100644 new mode 100755 diff --git a/public_html/view/groups.php b/public_html/view/groups.php index a97d816..cf7e4c2 100755 --- a/public_html/view/groups.php +++ b/public_html/view/groups.php @@ -1,8 +1,7 @@ @@ -56,7 +55,7 @@ /* [1] VIEW -> Liste des groupes =========================================================*/ - $request = new ModuleRequest('clusterDefault/getAll'); // On utilise la methode 'getAll' du module 'groupDefault' + $request = new Request('clusterDefault/getAll'); // On utilise la methode 'getAll' du module 'groupDefault' $answer = $request->dispatch(); // On recupere la reponse echo "
"; diff --git a/public_html/view/history.php b/public_html/view/history.php index 7daec1c..76afc21 100755 --- a/public_html/view/history.php +++ b/public_html/view/history.php @@ -1,7 +1,6 @@ diff --git a/public_html/view/profile.php b/public_html/view/profile.php index 35fe982..8163671 100755 --- a/public_html/view/profile.php +++ b/public_html/view/profile.php @@ -1,7 +1,6 @@ diff --git a/public_html/view/settings.php b/public_html/view/settings.php index b32ec33..84f7092 100755 --- a/public_html/view/settings.php +++ b/public_html/view/settings.php @@ -1,7 +1,6 @@ diff --git a/public_html/view/users.php b/public_html/view/users.php index 7c90b4a..9711b16 100755 --- a/public_html/view/users.php +++ b/public_html/view/users.php @@ -1,7 +1,6 @@ diff --git a/public_html/view/warehouse.php b/public_html/view/warehouse.php index 732ecb3..0a20db2 100755 --- a/public_html/view/warehouse.php +++ b/public_html/view/warehouse.php @@ -138,8 +138,9 @@ api.send(request, function(response){ + console.warn(response); // Si erreur de module - if( response.ModuleError != 0 ){ + if( response.error != 0 ){ errBox.innerHTML = 'Format des champs incorrect.'; wPassword.value = ''; return false;