From d0e89d349d5fffc0f60ad46304d389f774dbafc9 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sat, 2 Jul 2016 17:46:59 +0200 Subject: [PATCH] =?UTF-8?q?Gestion=20des=20'varchar'=20sp=C3=A9cifiques=20?= =?UTF-8?q?(flags)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/modules.json | 246 +++++++++++++++++++++++++++--- manager/Database.php | 45 ++++-- manager/module/machineDefault.php | 14 +- manager/module/userDefault.php | 12 +- test/automate.php | 9 ++ 5 files changed, 283 insertions(+), 43 deletions(-) diff --git a/config/modules.json b/config/modules.json index 0a3fcb1..04a5fc7 100755 --- a/config/modules.json +++ b/config/modules.json @@ -1,23 +1,5 @@ { - "userDefault" :[ - "create", - "link", - "unlink", - - "search", - - "getAll", - "getById", - "getByCode", - "getByUsername", - - "getClusters", - - "edit", - - "delete" - ], "machineDefault" :[ "create", @@ -31,12 +13,234 @@ "getById", "getByCode", "getByName", - + "getClusters", "edit", - + "delete" ] -} \ No newline at end of file +} + + +{ + + "userDefault": { + "create": { + "description": "blablabla", + "permissions": [], + "parameters": { + "code": { "description": "Code RFID de l'utilisateur.", "type": "rfid" }, + "username": { "description": "Identifiant de l'utilisateur.", "type": "varchar(1,30)" }, + "firstname": { "description": "Prénom de l'utilisateur.", "type": "varchar(3,30)" }, + "lastname": { "description": "Nom de l'utilisateur.", "type": "varchar(3,30)" }, + "mail": { "description": "Adresse mail de l'utilisateur.", "type": "mail" }, + "password": { "description": "Mot de passe de l'utilisateur.", "type": "text" }, + "status": { "description": "Status de l'utilisateur.", "type": "status" } + }, + "output": { + "id_user": { "description": "UID de l'utilisateur créé.", "type": "id" }, + "id_group": { "description": "UID du groupe de l'utilisateur.", "type": "id" } + } + }, + + "link": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "unlink": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "search": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "getAll": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "getById": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "getByCode": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "getByUsername": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "getClusters": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "edit": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + }, + + "delete": { + "description": "blablabla", + "permissions": [], + "parameters": { + + }, + "output": { + + } + } + + }, + + "module": { + "method": { + "description": "Test de l'API", + "permissions": [], + "parameters": {} + }, + + "phpunitParams": { + "description": "Méthode utile à phpunit pour le test des paramètres.", + "permissions": [], + "parameters": { + "p1": { "description": "Texte", "type": "text" }, + "p2": { "description": "Entier positif", "type": "id" } + }, + "output": { + "receivedArguments": { "description": "Liste des arguments reçus par la méthode", "type": "array" } + } + }, + + "phpunitOptionalParams": { + "description": "Méthode utile à phpunit pour le test des paramètres optionnels.", + "permissions": [], + "parameters": { + "p1": { "description": "Texte", "type": "text" }, + "p2": { "description": "Texte", "type": "text", "optional": false }, + "p3": { "description": "Entier positif (optionnel)", "type": "id", "optional": true } + } + }, + + "phpunitPermissions": { + "description": "Méthode utile à phpunit pour le test des permissions.", + "permissions": ["a", "b"], + "parameters": {} + }, + + + "markdown": { + "description": "Retourne une description en markdown des différents modules de l'API", + "permissions": [], + "options": { "download": true }, + "parameters": {} + }, + + + "apiBlueprint": { + "description": "Retourne une documentation de l'API au format API Blueprint.", + "permissions": [], + "options": { "download": true }, + "parameters": {} + } + }, + + + "upload": { + + "call_log": { + "description": "Upload d'un journal d'appel au format .xml. Retour des données de call_log/unserialize", + "permissions": ["admin"], + "parameters": { + "file": { "description": "Fichier du journal d'appel.", "type": "FILE" } + }, + "output": { + "tmp_id": { "description": "Identifiant temporaire du journal d'appel", "type": "varchar(40,40)" }, + "directory": { "description": "Annuaire des contacts trouvés", "type": "array>" }, + "call": { "description": "Liste des identifiants des contacts triés par nombre d'appels", "type": "array" }, + "sms": { "description": "Liste des identifiants des contacts triés par nombre de sms", "type": "array" } + } + } + }, + + + "download": { + + "multiple": { + "description": "Download des données relatives aux sujets donnés.", + "permissions": ["admin"], + "options": { "download": true }, + "parameters": { + "subjects": { "description": "Identifiants des sujets d'enquêtes à intégrer.", "type": "array", "optional": true }, + "phone": { "description": "Si vaut TRUE, renvoie les sujets cellulaires.", "type": "boolean", "optional": true }, + "facebook": { "description": "Si vaut TRUE, renvoie les sujet facebook.", "type": "boolean", "optional": true }, + "survey": { "description": "Si vaut TRUE, renvoie les sujets ResTIC.", "type": "boolean", "optional": true }, + "all": { "description": "Si vaut TRUE, renvoie tous les sujets enregistrés.", "type": "boolean", "optional": true } + } + } + } +} diff --git a/manager/Database.php b/manager/Database.php index 072d60e..134e899 100755 --- a/manager/Database.php +++ b/manager/Database.php @@ -191,16 +191,26 @@ - /* [1] Si de type VARCHAR(min, max) + /* [1] Si de type VARCHAR(min, max, flags) =========================================================*/ - if( preg_match('/^varchar\((\d+), ?(\d+)\)$/', $type, $match) ){ + if( preg_match('/^varchar\((\d+), ?(\d+)((?:, ?\w+)+)?\)$/', $type, $match) ){ // On recupere la taille min $min = (int) $match[1]; // On recupere la taille max $max = (int) $match[2]; - // On effectue la verification - return $checker && is_string($value) && strlen($value) <= $max && strlen($value) >= $min; + // On recupere le sous-type si défini + $flags = isset($match[3]) ? explode(',', substr($match[3], 1)) : null; + + // On effectue la verification de taille + $lenCheck = $checker && is_string($value) && strlen($value) <= $max && strlen($value) >= $min; + + // On vérifie les FLAGS s'il est donné + if( is_array($flags) ) + foreach( $flags as $flag ) + $lenCheck = $lenCheck && self::check($flag, $value); + + return $lenCheck; } @@ -239,6 +249,11 @@ 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); @@ -248,14 +263,26 @@ return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value); break; - // Hash sha1 - case 'sha1': + // Hash sha1/md5 + case 'hash': return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value); break; - // Numéro de téléphone - case 'number': - return $checker && is_string($value) && preg_match('/^(?:0|\+33 ?|0?0?33 ?|)([1-9] ?(?:[0-9] ?){8})$/i', $value); + case 'alphanumeric': + case 'user.username': + case 'machine.name': + case 'group.name': + return $checker && is_string($value) && preg_match('/^[\w-]+$/i', $value); + break; + + case 'user.firstname': + case 'user.lastname': + case 'letters': + return $checker && is_string($value) && preg_match('/^[a-z -]+$/i', $value); + break; + + case 'status': + return $checker && is_numeric($value) && floor($value) == $value && $value >= 0 && $value <= 100; break; // Tableau non vide diff --git a/manager/module/machineDefault.php b/manager/module/machineDefault.php index 2aa4c61..e39435c 100755 --- a/manager/module/machineDefault.php +++ b/manager/module/machineDefault.php @@ -63,7 +63,7 @@ // Si une erreur est retournee, on retourne une erreur if( $id_assoc === false ) return array('ModuleError' => ManagerError::ModuleError); - + /* [5] Gestion du retour @@ -101,13 +101,13 @@ /* [2] Creation de l'association =========================================================*/ $link_machine = new Repo('cluster/link', array($id_cluster, $id_machine, clusterRepo::MACHINE_CLASS)); - + return $link_machine; } - + /* RETIRE UNE MACHINE DONNEE A UN GROUPE DONNE @@ -132,7 +132,7 @@ /* [2] Suppression de l'association =========================================================*/ $link_machine = new Repo('cluster/unlink', array($id_cluster, $id_machine, clusterRepo::MACHINE_CLASS)); - + return $link_machine; } @@ -291,14 +291,14 @@ $correct_param = array( 'code' => Database::check('machine.code', $code ) && $machine_data['code'] != $code, 'name' => Database::check('machine.name', $name ) && $machine_data['name'] != $name - ); + ); /* (2) Gestion des parametres optionnels */ $opt_data = array( 'code' => ($correct_param['code']) ? $code : $machine_data['code'], 'name' => ($correct_param['name']) ? $name : $machine_data['name'] ); - + /* [3] Modification de la machine =========================================================*/ @@ -342,4 +342,4 @@ } -?> \ No newline at end of file +?> diff --git a/manager/module/userDefault.php b/manager/module/userDefault.php index dcbdf15..b7cfedc 100755 --- a/manager/module/userDefault.php +++ b/manager/module/userDefault.php @@ -75,7 +75,7 @@ // Si une erreur est retournee, on retourne une erreur if( $id_assoc === false ) return array('ModuleError' => ManagerError::ModuleError); - + /* [5] Gestion du retour @@ -113,13 +113,13 @@ /* [2] Creation de l'association =========================================================*/ $link_user = new Repo('cluster/link', array($id_cluster, $id_user, clusterRepo::USER_CLASS)); - + return $link_user; } - + /* RETIRE UNE MACHINE DONNEE A UN GROUPE DONNE @@ -144,7 +144,7 @@ /* [2] Suppression de l'association =========================================================*/ $link_user = new Repo('cluster/unlink', array($id_cluster, $id_user, clusterRepo::USER_CLASS)); - + return $link_user; } @@ -339,7 +339,7 @@ 'mail' => Database::check('user.mail', $mail ) && $user_data['mail'] != $mail, 'password' => Database::check('user.password', $password_hash ) && $user_data['password'] != $password_hash, 'status' => Database::check('user.status', $status ) && $user_data['status'] != $status - ); + ); /* (2) Gestion des parametres optionnels */ $opt_data = array( @@ -399,4 +399,4 @@ } -?> \ No newline at end of file +?> diff --git a/test/automate.php b/test/automate.php index b2f330f..1f68c30 100755 --- a/test/automate.php +++ b/test/automate.php @@ -5,6 +5,7 @@ use \manager\ResourceDispatcher; use \manager\ManagerError; use \manager\Repo; + use \manager\Database; debug(); @@ -303,6 +304,14 @@ }//editUser(); + // new ResourceDispatcher('f/svg/search/st/sub-menu-side/ff0000', true); + + + var_dump( Database::check('varchar(3,5)', "blabl") ); + var_dump( Database::check('varchar(3,5)', "bla -") ); + var_dump( Database::check('varchar(3,5,subtest,subsub)', "blabl") ); + + ?>