diff --git a/automate.php b/automate.php index a9b1327..0853128 100755 --- a/automate.php +++ b/automate.php @@ -79,6 +79,5 @@ // )); // var_dump($response); - ?> \ No newline at end of file diff --git a/config/modules.json b/config/modules.json index 7f0ca33..e11fcde 100755 --- a/config/modules.json +++ b/config/modules.json @@ -5,8 +5,8 @@ "description": "Connexion avec un login (identifiant ou adresse mail) et un mot de passe.", "permissions": [], "parameters": { - "login": { "description": "Identifiant ou adresse mail", "type": "varchar(255)" }, - "password": { "description": "Mot de passe", "type":"text" } + "login": { "description": "Identifiant ou adresse mail", "type": "varchar(255)" }, + "password": { "description": "Mot de passe", "type":"text" } } }, @@ -20,7 +20,29 @@ "getById": { "description": "Retourne les informations d'un utilisateur d'id donne.", "permissions": ["admin"], - "parameters": { "id_user" : "id" } + "parameters": { + "id_user": { "description": "UID de l'utilisateur recherche.", "type": "id" } + } + }, + + + "getAll": { + "description": "Retourne les informations de tous les utilisateurs.", + "permissions": ["admin"], + "parameters": {} + }, + + + "create": { + "description": "Creation d'un nouvel utilisateur.", + "permissions": ["admin"], + "parameters": { + "login" : { "description": "Login de l'utilisateur, 30 caracteres maximum.", "type": "varchar(30)" }, + "password" : { "description": "Mot de passe de l'utilisateur.", "type": "text" }, + "mail" : { "description": "Adresse mail de l'utilisateur.", "type": "mail" }, + "reference" : { "description": "UID d'une personne d'un sondage, peut etre vide.", "type": "text" }, + "permissions": { "description": "Liste des permissions de l'utilisateur.", "type": "text" } + } } }, diff --git a/config/repositories.json b/config/repositories.json index fa0fae3..8ac9f7a 100755 --- a/config/repositories.json +++ b/config/repositories.json @@ -4,6 +4,7 @@ "login", "getById", "getAll", + "checkUnique", "create", "remove" ], diff --git a/manager/Database.php b/manager/Database.php index f50a475..e889d69 100755 --- a/manager/Database.php +++ b/manager/Database.php @@ -218,9 +218,9 @@ case 'sha1': return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value); break; - - case 'user.status': - return $checker && is_numeric($value) && floor($value) == $value && $value >= 0 && $value <= 100; + + case 'array': + return $checker && is_array($value); break; } diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php index 3caa037..775d2b5 100755 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -350,7 +350,7 @@ // Si le type n'est pas defini, on reboucle if( !isset($paramsdata['type']) ) continue; - + // Si la verification est fausse, on retourne faux if( !Database::check($paramsdata['type'], $params[$name]) ) return false; } diff --git a/manager/module/user.php b/manager/module/user.php index 42a0e13..38145f5 100755 --- a/manager/module/user.php +++ b/manager/module/user.php @@ -86,6 +86,74 @@ ); } + + + + /* RETOURNE LA LISTE DE TOUS LES UTILISATEURS + * + * @return users Tableau contenant les informations de tous les utilisateurs + * + */ + public static function getAll(){ + /* [1] On recupere les donnees des utilisateurs + =========================================================*/ + $getUsers = new Repo('user/getAll'); + $users_data = $getUsers->answer(); + + // Si aucun utilisateur n'est trouve + if( $users_data === false ) return array('ModuleError' => ManagerError::ModuleError); + + /* [2] On met les permissions au bon format (string -> array) + =========================================================*/ + foreach($users_data as $i=>$user) + $users_data[$i]['permission'] = explode( ',', str_replace(' ', '', $user['permission']) ); + + /* [3] Gestion du retour + =========================================================*/ + return array( + 'ModuleError' => ManagerError::Success, + 'users' => $users_data + ); + } + + + + + + /* CREE UN UTILISATEUR + * + * @login Login (identifiant) de l'utilisateur + * @password Password de l'utilisateur + * @mail Adresse mail de l'utilisateur + * @reference Reference vers une Personne (sinon NULL) + * @permissions Liste des permissions de l'utilisateur + * + * @return id_user Renvoie l'id de l'utilisateur cree + * + */ + public static function create($login, $password, $mail, $reference, $permissions){ + /* [0] Verification et formattage des INPUT + =========================================================*/ + $password = sessionManager::sha1($password); + $reference = (is_numeric($reference)) ? (int) $reference : null; + $permissions = explode( ',', str_replace(' ', '', $permissions) ); + + /* [1] Creation de l'utilisateur + =========================================================*/ + $create = new Repo('user/create', array($login, $password, $mail, $reference, $permissions)); + $created_id = $create->answer(); + + // Si erreur de creation, on retourne une erreur + if( $created_id === false ) return array( 'ModuleError' => ManagerError::ModuleError ); + + /* [2] Gestion du retour + =========================================================*/ + return array( + 'ModuleError' => ManagerError::Success, + 'id_user' => $created_id + ); + } + // [x] "login", // [x] "logout", // [x] "getById", diff --git a/manager/repo/user.php b/manager/repo/user.php index 4a60545..6b32bec 100755 --- a/manager/repo/user.php +++ b/manager/repo/user.php @@ -2,6 +2,7 @@ namespace manager\repo; use \manager\Database; + use \manager\sessionManager; class user{ @@ -32,7 +33,7 @@ $check->execute(array( ':username' => $login, ':mail' => $login, - ':password' => sha1($password) + ':password' => sessionManager::sha1($password) )); $result = $check->fetch(); @@ -75,7 +76,139 @@ /* [3] Gestion du retour =========================================================*/ - return Database::delNumeric( $userData ); + return Database::delNumeric( $userData, true ); + } + + + + + + /* RETOURNE LES DONNEES DE TOUS LES UTILISATEURS + * + * @return users Tableau contenant les donnees des utilisateurs, retourne FALSE si erreur + * + */ + public static function getAll(){ + /* [1] On effectue la requete + =========================================================*/ + $getUsers = Database::getPDO()->query("SELECT id_user, login, mail, permission + FROM users + ORDER BY login ASC"); + + + /* [2] On recupere le resultat de la requete + =========================================================*/ + $usersData = $getUsers->fetchAll(); + + // Si l'utilisateur n'existe pas, on retourne FALSE + if( $usersData === false ) return false; + + /* [3] Gestion du retour + =========================================================*/ + return Database::delNumeric( $usersData ); + } + + + + + /* CREE UN UTILISATEUR + * + * @login Login (identifiant) de l'utilisateur + * @password Password de l'utilisateur + * @mail Adresse mail de l'utilisateur + * @reference Reference vers une Personne (sinon NULL) + * @permissions Liste des permissions de l'utilisateur + * + * @return id_user Renvoie l'id de l'utilisateur cree ou FALSE si erreur + * + */ + public static function create($login, $password, $mail, $reference, $permissions){ + /* [0] Verification et formattage des INPUT + =========================================================*/ + $checkInput = Database::check('sha1', $password); + $checkInput = $checkInput && ( Database::check('int', $reference) || $reference === null ); + $checkInput = $checkInput && Database::check('array', $permissions); + + // Si erreur en entree, on retourne FAUX + if( !$checkInput ) return false; + + // On formatte les permissions (array -> string) + $permissions = implode(',', $permissions); + + + /* [1] On verifie que le login/mail et reference sont uniques + =========================================================*/ + $checkUnique = Database::getPDO()->prepare("SELECT id_user + FROM users + WHERE login = :login + OR mail = :mail + OR ( reference = :reference AND reference is not NULL )"); + $checkUnique->execute(array( + ':login' => $login, + ':mail' => $mail, + ':reference' => $reference + )); + $unique = $checkUnique->fetch() === false; + + // Si un utilisateur a le meme LOGIN/MAIL ou REFERENCE, on retourne une erreur + if( !$unique ) return false; + + + /* [2] Creation de l'utilisateur + =========================================================*/ + /* (1) Si reference NULL */ + if( $reference == null ){ + + $create = Database::getPDO()->prepare("INSERT INTO users(id_user, login, password, mail, reference, permission) + VALUES(DEFAULT, :login, :password, :mail, NULL, :permission)"); + $create->execute(array( + ':login' => $login, + ':password' => $password, + ':mail' => $mail, + ':permission' => $permissions + )); + + /* (2) Si reference est defini */ + }else{ + + $create = Database::getPDO()->prepare("INSERT INTO users(id_user, login, password, mail, reference, permission) + VALUES(DEFAULT, :login, :password, :mail, :reference, :permission)"); + $create->execute(array( + ':login' => $login, + ':password' => $password, + ':mail' => $mail, + ':reference' => (int) $reference, + ':permission' => $permissions + )); + + } + + /* [3] Verification de la creation + recuperation id + =========================================================*/ + $checkCreate = Database::getPDO()->prepare("SELECT id_user + FROM users + WHERE login = :login + AND password = :password + AND mail = :mail + AND ( reference = :reference OR reference is NULL ) + AND permission = :permission"); + $checkCreate->execute(array( + ':login' => $login, + ':password' => $password, + ':mail' => $mail, + ':reference' => (int) $reference, + ':permission' => $permissions + )); + + // On recupere l'id de l'utilisateur + $id_user = $checkCreate->fetch(); + + // Si erreur, on retourne FALSE + if( $id_user === false ) return false; + + /* [4] Gestion du retour + =========================================================*/ + return $id_user['id_user']; } }