sid/manager/user.php

172 lines
6.5 KiB
PHP
Raw Normal View History

<?php
require_once __ROOT__.'/manager/security.php';
require_once __ROOT__.'/manager/database.php';
/***********************************************************
* *
* MANAGER DES UTILISATEURS *
* *
************************************************************
* *
* [0] Constantes *
* [1] ROUTAGE de niveau 1 *
* [2] Authentification *
* [a] userlist *
* [b] Connection *
* [c] Déconnection *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
***********************************************************/
/* [1] ROUTAGE DE NIVEAU 1
============================================================*/
function user_switch_level_1($request, $answer){
switch( $request->level_1 ){
/****************************/
/* authentification (login) */
/****************************/
case 'authentification':
$areSetParam = isset($request->username) && isset($request->password); // les arguments existent
$typeOkParam = $areSetParam && is_string($request->username) && is_string($request->password); // ils sont tous 2 des string
$nEmptyParam = $typeOkParam && strlen($request->username) > 0 && strlen($request->password) > 0; // d'au moins 1 caractère
$usernameCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->username); // username bon format
$passwordCheck = $usernameCheck && preg_match('/^[\w -]{6,100}$/i', $request->password); // password bon format
if( $passwordCheck ) // si tout les params sont ok
$answer->request = user_authentification($request->username, $request->password);
else{
if ( !$areSetParam ) $answer->request= 'missing_param';
elseif( !$typeOkParam ) $answer->request = 'wrong_type';
else $answer->request = 'empty_param';
}
break;
/*****************/
/* déconnection */
/*****************/
case 'exit':
$_SESSION['username'] = null; // on supprime l'identifiant
if( $_SESSION['username'] == null )
$answer->request = 'success'; // succès
else
$answer->request = 'error';
break;
/**************************/
/* création d'utilisateur */
/**************************/
case 'create':
$areSetParam = isset($request->username) && isset($request->prenom) && isset($request->nom) && isset($request->email) && isset($request->password) && isset($request->droits); // les arguments existent
$typeOkParam = $areSetParam && is_string($request->username) && is_string($request->prenom) && is_string($request->nom) && is_string($request->email) && is_string($request->password) && is_string($request->droits); // ils sont tous 2 des string
$nEmptyParam = $typeOkParam && strlen($request->username) > 0 && strlen($request->prenom) > 0 && is_string($request->nom) && is_string($request->email) && is_string($request->password) && is_string($request->droits); // d'au moins 1 caractère
$usernameCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->username); // username bon format
$prenomCheck = $usernameCheck && preg_match('/^[a-z -]{3,50}$/i', $request->prenom); // prenom bon format
$nomCheck = $prenomCheck && preg_match('/^[a-z -]{3,50}$/i', $request->nom); // nom bon format
$emailCheck = $nomCheck && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $request->email); // email bon format
$passwordCheck = $emailCheck && preg_match('/^[\w -]{6,100}$/i', $request->password); // password bon format
$droitsCheck = $passwordCheck && is_int(array_search($request->droits, ['student', 'teacher', 'master', 'admin'])); // droits bon format
if( $droitsCheck ){ // si tout les paramètres sont bons
$answer->request = DataBase::getInstance()->creerUtilisateur($request->username, $request->prenom, $request->nom, $request->email, $request->password, $request->droits);
}else
$answer->request = 'param_error';
break;
/***********/
/* DEFAULT */
/***********/
default:
$answer->request = 'unknown_level_1';
break;
}
}
/* [2] AUTHENTIFICATION
============================================================*/
/* [a] userlist */
function user_getUserList(){
$userlistFile = file_get_contents("src/userlist.json");
return json_decode( $userlistFile );
}
/* [b] CONNECTION
========================================================*/
/* GESTION DE L'AUTHENTIFICATION D'UN UTILISATEUR
*
* @param username<String> Identifiant de l'utilisateur
* @param password<String> Mot de passe de l'utilisateur
*
* si @username est référencé et que le mot de passe associé vaut @password
* alors @return TRUE sinon FALSE
* + mise ajout à @answer
*
* Les variables sessions suivantes sont définies :
* - $_SESSION['permissions']
* - $_SESSION['userid']
* - $_SESSION['username']
*
* @return Boolean true si l'utilisateur est ok
*/
function user_authentification($username, $password){
// [1] On récupère la liste d'utilisateurs (/src/userlist.json)
$userList = user_getUserList();
// [2] On check l'existence de l'utilisateur
if( isset($userList->{$username}) ){
// [3] On check le mot de passe
if( $userList->{$username}->password == $password ){
// on définit les variables session
$_SESSION['username'] = $username;
$_SESSION['permissions'] = $userList->{$username}->permissions;
return 'success';
}else
return 'wrong_password';
}else
return 'unknown_user';
}
?>