Indépendentialisation du 'manager' 'Checker'

This commit is contained in:
xdrm-brackets 2016-07-07 15:05:55 +02:00
parent fa98401683
commit e3a459200f
4 changed files with 202 additions and 51 deletions

View File

@ -56,6 +56,7 @@
} }
}, },
"authentificationDefault": { "authentificationDefault": {
"warehouse": { "warehouse": {
"description": "Connexion de premier niveau : entrepot.", "description": "Connexion de premier niveau : entrepot.",

150
manager/Checker.php Normal file
View File

@ -0,0 +1,150 @@
<?php
namespace manager;
class Checker{
/* VERIFICATIONS DES TYPES UTILES GENERIQUES
*
* @type<String> Type que l'on veut verifier
* @value<mixed*> Valeur a verifier
*
* @return match<Boolean> Retourne si oui ou non la valeur @value est du bon type @type
*
*/
public static function run($type, $value){
$checker = true;
/* [0] On verifie que $value n'est pas nul
=========================================================*/
if( is_null($value) ) return false;
/* [1] Si de type VARCHAR(min, max, flags)
=========================================================*/
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 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::run($flag, $value);
return $lenCheck;
}
/* [2] Si de type ARRAY(type_elements)
=========================================================*/
if( preg_match('/^array<(.+)>$/', $type, $match) ){
// Si c'est pas un tableau on retourne une erreur
if( !is_array($value) )
return false;
$elements_type = $match[1];
// On verifie le type pour chaque element
foreach($value as $element)
// Si erreur dans au moins 1 element, on retourne que c'est incorrect
if( !self::run($elements_type, trim($element) ) )
return false;
// Si aucune erreur, on retourne que tout est bon
return true;
}
/* [n] Sinon, tous les autres types definis
=========================================================*/
switch($type){
// Quoi que ce soit
case 'mixed':
return $checker && !is_null($value);
break;
// Entier positif (id dans BDD)
case 'id':
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);
// Adresse mail (255 caracteres max)
case 'mail':
return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value);
break;
// Hash sha1/md5
case 'hash':
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
break;
case 'alphanumeric':
case 'user.username':
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
case 'array':
return $checker && is_array($value) && count($value) > 0;
break;
// Boolean
case 'boolean':
return $checker && is_bool($value);
break;
// Objet non vide
case 'object':
return $checker && is_object($value) && count((array) $value) > 0;
break;
// Chaine JSON (on vérifie via le parser)
case 'json':
return $checker && is_string($value) && json_decode($value, true) !== NULL;
break;
default:
return false;
break;
}
return $checker;
}
}
?>

View File

@ -461,7 +461,7 @@
/* (6) Si le paramètre est renseigné */ /* (6) Si le paramètre est renseigné */
}else }else
// Si la verification est fausse, on retourne faux // Si la verification est fausse, on retourne faux
if( !Database::check($paramsdata['type'], $params[$name]) ) if( !Checker::run($paramsdata['type'], $params[$name]) )
return false; return false;
} }

View File

@ -6,59 +6,59 @@
/* [1] AUTO_INCREMENT /* [1] AUTO_INCREMENT
=========================================================*/ =========================================================*/
public function testAutoIncrementSizeInfCorrect(){ public function testAutoIncrementSizeInfCorrect(){
$this->assertTrue( \manager\Database::check('auto_increment_id', -2147483647) ); $this->assertTrue( \manager\Checker::run('auto_increment_id', -2147483647) );
} }
public function testAutoIncrementSizeInfStringCorrect(){ public function testAutoIncrementSizeInfStringCorrect(){
$this->assertTrue( \manager\Database::check('auto_increment_id', '-2147483647') ); $this->assertTrue( \manager\Checker::run('auto_increment_id', '-2147483647') );
} }
public function testAutoIncrementSizeSupCorrect(){ public function testAutoIncrementSizeSupCorrect(){
$this->assertTrue( \manager\Database::check('auto_increment_id', 2147483647) ); $this->assertTrue( \manager\Checker::run('auto_increment_id', 2147483647) );
} }
public function testAutoIncrementSizeSupStringCorrect(){ public function testAutoIncrementSizeSupStringCorrect(){
$this->assertTrue( \manager\Database::check('auto_increment_id', '2147483647') ); $this->assertTrue( \manager\Checker::run('auto_increment_id', '2147483647') );
} }
public function testAutoIncrementSizeLtInfIncorrect(){ public function testAutoIncrementSizeLtInfIncorrect(){
$this->assertFalse( \manager\Database::check('auto_increment_id', -2147483647-1) ); $this->assertFalse( \manager\Checker::run('auto_increment_id', -2147483647-1) );
} }
public function testAutoIncrementSizeLtInfStringIncorrect(){ public function testAutoIncrementSizeLtInfStringIncorrect(){
$this->assertFalse( \manager\Database::check('auto_increment_id', '-2147483648') ); $this->assertFalse( \manager\Checker::run('auto_increment_id', '-2147483648') );
} }
public function testAutoIncrementSizeGtSupIncorrect(){ public function testAutoIncrementSizeGtSupIncorrect(){
$this->assertFalse( \manager\Database::check('auto_increment_id', 2147483647+1) ); $this->assertFalse( \manager\Checker::run('auto_increment_id', 2147483647+1) );
} }
public function testAutoIncrementSizeGtSupStringIncorrect(){ public function testAutoIncrementSizeGtSupStringIncorrect(){
$this->assertFalse( \manager\Database::check('auto_increment_id', '2147483648') ); $this->assertFalse( \manager\Checker::run('auto_increment_id', '2147483648') );
} }
/* [1] Code RFID /* [1] Code RFID
=========================================================*/ =========================================================*/
public function testUserCodeSize4(){ public function testUserCodeSize4(){
$this->assertTrue( \manager\Database::check('user.code', '01-23-AB-CD') ); $this->assertTrue( \manager\Checker::run('user.code', '01-23-AB-CD') );
} }
public function testUserCodeSize6(){ public function testUserCodeSize6(){
$this->assertTrue( \manager\Database::check('user.code', '01-23-45-67-89-AB') ); $this->assertTrue( \manager\Checker::run('user.code', '01-23-45-67-89-AB') );
} }
public function testUserCodeSize4WrongCharacter(){ public function testUserCodeSize4WrongCharacter(){
$this->assertFalse( \manager\Database::check('user.code', '01-23-AB-CG') ); $this->assertFalse( \manager\Checker::run('user.code', '01-23-AB-CG') );
} }
public function testUserCodeSizeGreaterThan6(){ public function testUserCodeSizeGreaterThan6(){
$this->assertFalse( \manager\Database::check('user.code', '01-23-45-67-89-AB-CD') ); $this->assertFalse( \manager\Checker::run('user.code', '01-23-45-67-89-AB-CD') );
} }
public function testUserCodeSize6WrongCharacter(){ public function testUserCodeSize6WrongCharacter(){
$this->assertFalse( \manager\Database::check('user.code', '01-23-45-67-89-AG') ); $this->assertFalse( \manager\Checker::run('user.code', '01-23-45-67-89-AG') );
} }
@ -67,91 +67,91 @@
=========================================================*/ =========================================================*/
/* (1) Type */ /* (1) Type */
public function testUsernameTypeStringCorrect(){ public function testUsernameTypeStringCorrect(){
$this->assertTrue( \manager\Database::check('user.username', '012') ); $this->assertTrue( \manager\Checker::run('user.username', '012') );
} }
public function testUsernameTypeIntIncorrect(){ public function testUsernameTypeIntIncorrect(){
$this->assertFalse( \manager\Database::check('user.username', 012) ); $this->assertFalse( \manager\Checker::run('user.username', 012) );
} }
/* (2) Content */ /* (2) Content */
public function testUsernameContentCorrect(){ public function testUsernameContentCorrect(){
$this->assertTrue( \manager\Database::check('user.username', '0123456789_-') ); $this->assertTrue( \manager\Checker::run('user.username', '0123456789_-') );
$this->assertTrue( \manager\Database::check('user.username', 'abcdefghijklmnopqrstuvwxyz') ); $this->assertTrue( \manager\Checker::run('user.username', 'abcdefghijklmnopqrstuvwxyz') );
$this->assertTrue( \manager\Database::check('user.username', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') ); $this->assertTrue( \manager\Checker::run('user.username', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') );
} }
public function testUsernameContentIncorrect(){ public function testUsernameContentIncorrect(){
$illegal_chars = '{}[]()=+.,\'\\"/:;|!@#$%^&* '; $illegal_chars = '{}[]()=+.,\'\\"/:;|!@#$%^&* ';
foreach(str_split($illegal_chars) as $char) // Teste les caracteres enonces plus haut foreach(str_split($illegal_chars) as $char) // Teste les caracteres enonces plus haut
$this->assertFalse( \manager\Database::check('user.username', 'abc'.$char) ); $this->assertFalse( \manager\Checker::run('user.username', 'abc'.$char) );
} }
/* (3) Size */ /* (3) Size */
public function testUsernameSize3Correct(){ public function testUsernameSize3Correct(){
$this->assertEquals( 3, strlen('012') ); $this->assertEquals( 3, strlen('012') );
$this->assertTrue( \manager\Database::check('user.username', '012') ); $this->assertTrue( \manager\Checker::run('user.username', '012') );
} }
public function testUsernameSize30Correct(){ public function testUsernameSize30Correct(){
$this->assertEquals( 30, strlen('0123456789abcdefghijklmno_-sda') ); $this->assertEquals( 30, strlen('0123456789abcdefghijklmno_-sda') );
$this->assertTrue( \manager\Database::check('user.username', '0123456789abcdefghijklmno_-sda') ); $this->assertTrue( \manager\Checker::run('user.username', '0123456789abcdefghijklmno_-sda') );
} }
public function testUsernameSizeLt3Incorrect(){ public function testUsernameSizeLt3Incorrect(){
$this->assertLessThan( 3, strlen('') ); $this->assertLessThan( 3, strlen('') );
$this->assertFalse( \manager\Database::check('user.username', '') ); $this->assertFalse( \manager\Checker::run('user.username', '') );
} }
public function testUsernameSizeGt30Incorrect(){ public function testUsernameSizeGt30Incorrect(){
$this->assertGreaterThan( 30, strlen('0123456789abcdefghijklmno_-sdaa') ); $this->assertGreaterThan( 30, strlen('0123456789abcdefghijklmno_-sdaa') );
$this->assertFalse( \manager\Database::check('user.username', '0123456789abcdefghijklmno_-sdaa') ); $this->assertFalse( \manager\Checker::run('user.username', '0123456789abcdefghijklmno_-sdaa') );
} }
/* [3] firstname / lastname /* [3] firstname / lastname
=========================================================*/ =========================================================*/
/* (1) Type */ /* (1) Type */
public function testFirstnameTypeStringCorrect(){ public function testFirstnameTypeStringCorrect(){
$this->assertTrue( \manager\Database::check('user.firstname', 'abc') ); $this->assertTrue( \manager\Checker::run('user.firstname', 'abc') );
} }
public function testFirstnameTypeIntIncorrect(){ public function testFirstnameTypeIntIncorrect(){
$this->assertFalse( \manager\Database::check('user.firstname', 01932) ); $this->assertFalse( \manager\Checker::run('user.firstname', 01932) );
} }
/* (2) Content */ /* (2) Content */
public function testFirstnameContentCorrect(){ public function testFirstnameContentCorrect(){
$this->assertTrue( \manager\Database::check('user.firstname', 'abcdefghijklmnopqrstuvwxyz') ); $this->assertTrue( \manager\Checker::run('user.firstname', 'abcdefghijklmnopqrstuvwxyz') );
$this->assertTrue( \manager\Database::check('user.firstname', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') ); $this->assertTrue( \manager\Checker::run('user.firstname', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') );
} }
public function testFirstnameContentIncorrect(){ public function testFirstnameContentIncorrect(){
$illegal_chars = '{}[]()=_+.,\'\\"/:;|!@#$%^&*0123456789'; $illegal_chars = '{}[]()=_+.,\'\\"/:;|!@#$%^&*0123456789';
foreach(str_split($illegal_chars) as $char) // Teste les caracteres enonces plus haut foreach(str_split($illegal_chars) as $char) // Teste les caracteres enonces plus haut
$this->assertFalse( \manager\Database::check('user.firstname', 'abc'.$char) ); $this->assertFalse( \manager\Checker::run('user.firstname', 'abc'.$char) );
} }
/* (3) Size */ /* (3) Size */
public function testFirstnameSize3Correct(){ public function testFirstnameSize3Correct(){
$this->assertEquals( 3, strlen('abc') ); $this->assertEquals( 3, strlen('abc') );
$this->assertTrue( \manager\Database::check('user.firstname', 'abc') ); $this->assertTrue( \manager\Checker::run('user.firstname', 'abc') );
} }
public function testFirstnameSize30Correct(){ public function testFirstnameSize30Correct(){
$this->assertEquals( 30, strlen('abcdefghijklmnopqrstuvwxyz-k s') ); $this->assertEquals( 30, strlen('abcdefghijklmnopqrstuvwxyz-k s') );
$this->assertTrue( \manager\Database::check('user.firstname', 'abcdefghijklmnopqrstuvwxyz-k s') ); $this->assertTrue( \manager\Checker::run('user.firstname', 'abcdefghijklmnopqrstuvwxyz-k s') );
} }
public function testFirstnameSizeLt3Incorrect(){ public function testFirstnameSizeLt3Incorrect(){
$this->assertLessThan( 3, strlen('ab') ); $this->assertLessThan( 3, strlen('ab') );
$this->assertFalse( \manager\Database::check('user.firstname', 'ab') ); $this->assertFalse( \manager\Checker::run('user.firstname', 'ab') );
} }
public function testFirstnameSizeGt30Incorrect(){ public function testFirstnameSizeGt30Incorrect(){
$this->assertGreaterThan( 30, strlen('abcdefghijklmnopqrstuvwxyz-k ss') ); $this->assertGreaterThan( 30, strlen('abcdefghijklmnopqrstuvwxyz-k ss') );
$this->assertFalse( \manager\Database::check('user.firstname', 'abcdefghijklmnopqrstuvwxyz-k ss') ); $this->assertFalse( \manager\Checker::run('user.firstname', 'abcdefghijklmnopqrstuvwxyz-k ss') );
} }
/* [4] Adresse mail /* [4] Adresse mail
@ -159,25 +159,25 @@
/* (1) Size */ /* (1) Size */
public function testMailSizeEqCorrect(){ public function testMailSizeEqCorrect(){
$this->assertLessThanOrEqual( 50, 'nom-prenom.mot@domaine-d.gouv' ); $this->assertLessThanOrEqual( 50, 'nom-prenom.mot@domaine-d.gouv' );
$this->assertTrue( \manager\Database::check('user.mail', 'nom-prenom.mot@domaine-d.gouv') ); $this->assertTrue( \manager\Checker::run('user.mail', 'nom-prenom.mot@domaine-d.gouv') );
} }
public function testMailSizeSupCorrect(){ public function testMailSizeSupCorrect(){
$this->assertGreaterThan( 50, strlen('ab12345678901234567890nom-prenom.mot@domaine-d.gouv') ); $this->assertGreaterThan( 50, strlen('ab12345678901234567890nom-prenom.mot@domaine-d.gouv') );
$this->assertFalse( \manager\Database::check('user.mail', 'ab12345678901234567890nom-prenom.mot@domaine-d.gouv') ); $this->assertFalse( \manager\Checker::run('user.mail', 'ab12345678901234567890nom-prenom.mot@domaine-d.gouv') );
} }
/* (2) Content */ /* (2) Content */
public function testMailContentCorrect(){ public function testMailContentCorrect(){
$this->assertTrue( \manager\Database::check('user.mail', '0nom-prenom.mot@domaine-d.gouv') ); $this->assertTrue( \manager\Checker::run('user.mail', '0nom-prenom.mot@domaine-d.gouv') );
} }
public function testMailContentIncorrect1(){ public function testMailContentIncorrect1(){
$this->assertFalse( \manager\Database::check('user.mail', '0nom-prenom.mot@domaine-d.gouve') ); $this->assertFalse( \manager\Checker::run('user.mail', '0nom-prenom.mot@domaine-d.gouve') );
} }
public function testMailContentIncorrect2(){ public function testMailContentIncorrect2(){
$this->assertFalse( \manager\Database::check('user.mail', '0nom-prenom.mot@domaine-d.g') ); $this->assertFalse( \manager\Checker::run('user.mail', '0nom-prenom.mot@domaine-d.g') );
} }
@ -188,31 +188,31 @@
$password_hash = \manager\sessionManager::secure_sha1('monmotdepasse'); $password_hash = \manager\sessionManager::secure_sha1('monmotdepasse');
$this->assertEquals( 40, strlen($password_hash) ); $this->assertEquals( 40, strlen($password_hash) );
$this->assertTrue( \manager\Database::check('user.password', $password_hash) ); $this->assertTrue( \manager\Checker::run('user.password', $password_hash) );
} }
public function testPasswordSizeInfIncorrect(){ public function testPasswordSizeInfIncorrect(){
$password_hash = 'a'; $password_hash = 'a';
$this->assertLessThan( 40, strlen($password_hash) ); $this->assertLessThan( 40, strlen($password_hash) );
$this->assertFalse( \manager\Database::check('user.password', $password_hash) ); $this->assertFalse( \manager\Checker::run('user.password', $password_hash) );
} }
public function testPasswordSizeSupIncorrect(){ public function testPasswordSizeSupIncorrect(){
$password_hash = \manager\sessionManager::secure_sha1('monmotdepasse').'a'; $password_hash = \manager\sessionManager::secure_sha1('monmotdepasse').'a';
$this->assertGreaterThan( 40, strlen($password_hash) ); $this->assertGreaterThan( 40, strlen($password_hash) );
$this->assertFalse( \manager\Database::check('user.password', $password_hash) ); $this->assertFalse( \manager\Checker::run('user.password', $password_hash) );
} }
public function testPasswordContentCorrect(){ public function testPasswordContentCorrect(){
$this->assertTrue( \manager\Database::check('user.password', 'dd629d39c4576731a2bef003c72ff89d6fc2a99a') ); $this->assertTrue( \manager\Checker::run('user.password', 'dd629d39c4576731a2bef003c72ff89d6fc2a99a') );
} }
public function testPasswordContentIncorrect(){ public function testPasswordContentIncorrect(){
$this->assertContains( 'g', 'dd629d39c4576731a2bef003c72ff89d6fc2a9g' ); $this->assertContains( 'g', 'dd629d39c4576731a2bef003c72ff89d6fc2a9g' );
$this->assertFalse( \manager\Database::check('user.password', 'dd629d39c4576731a2bef003c72ff89d6fc2a9g') ); $this->assertFalse( \manager\Checker::run('user.password', 'dd629d39c4576731a2bef003c72ff89d6fc2a9g') );
} }
@ -221,42 +221,42 @@
=========================================================*/ =========================================================*/
/* (1) Type */ /* (1) Type */
public function testStatusTypeIntCorrect(){ public function testStatusTypeIntCorrect(){
$this->assertTrue( \manager\Database::check('user.status', 1) ); $this->assertTrue( \manager\Checker::run('user.status', 1) );
} }
public function testStatusTypeStringCorrect(){ public function testStatusTypeStringCorrect(){
$this->assertTrue( \manager\Database::check('user.status', '1') ); $this->assertTrue( \manager\Checker::run('user.status', '1') );
} }
public function testStatusTypeIntIncorrect(){ public function testStatusTypeIntIncorrect(){
$this->assertFalse( \manager\Database::check('user.status', 1.03) ); $this->assertFalse( \manager\Checker::run('user.status', 1.03) );
} }
public function testStatusTypeStringIncorrect(){ public function testStatusTypeStringIncorrect(){
$this->assertFalse( \manager\Database::check('user.status', '1.03') ); $this->assertFalse( \manager\Checker::run('user.status', '1.03') );
} }
/* (2) Size */ /* (2) Size */
public function testStatusSizeInfCorrect(){ public function testStatusSizeInfCorrect(){
$this->assertGreaterThanOrEqual( 0, 0 ); $this->assertGreaterThanOrEqual( 0, 0 );
$this->assertTrue( \manager\Database::check('user.status', 0) ); $this->assertTrue( \manager\Checker::run('user.status', 0) );
} }
public function testStatusSizeSupCorrect(){ public function testStatusSizeSupCorrect(){
$this->assertLessThanOrEqual( 100, 100 ); $this->assertLessThanOrEqual( 100, 100 );
$this->assertTrue( \manager\Database::check('user.status', 100) ); $this->assertTrue( \manager\Checker::run('user.status', 100) );
} }
public function testStatusSizeInfIncorrect(){ public function testStatusSizeInfIncorrect(){
$this->assertLessThan( 0, -1 ); $this->assertLessThan( 0, -1 );
$this->assertFalse( \manager\Database::check('user.status', -1) ); $this->assertFalse( \manager\Checker::run('user.status', -1) );
} }
public function testStatusSizeSupIncorrect(){ public function testStatusSizeSupIncorrect(){
$this->assertGreaterThan( 100, 101 ); $this->assertGreaterThan( 100, 101 );
$this->assertFalse( \manager\Database::check('user.status', 101) ); $this->assertFalse( \manager\Checker::run('user.status', 101) );
} }