2015-10-24 17:01:22 +00:00
< ? php
require_once __ROOT__ . '/manager/security.php' ;
require_once __ROOT__ . '/manager/database.php' ;
2015-10-21 20:56:56 +00:00
/***********************************************************
* *
* MANAGER DES UTILISATEURS *
* *
************************************************************
* *
* [ 0 ] Constantes *
* [ 1 ] ROUTAGE de niveau 1 *
* [ 2 ] Authentification *
* [ a ] userlist *
2015-10-22 08:29:43 +00:00
* [ b ] Connection *
* [ c ] Déconnection *
2015-10-21 20:56:56 +00:00
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
***********************************************************/
/* [ 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
2015-10-23 08:04:26 +00:00
$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
2015-10-21 20:56:56 +00:00
2015-10-23 08:04:26 +00:00
if ( $passwordCheck ) // si tout les params sont ok
2015-10-21 20:56:56 +00:00
$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 ;
2015-10-22 08:29:43 +00:00
/*****************/
/* 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 ;
2015-10-22 16:55:26 +00:00
/**************************/
/* 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
2015-10-24 08:57:16 +00:00
$answer -> request = DataBase :: getInstance () -> creerUtilisateur ( $request -> username , $request -> prenom , $request -> nom , $request -> email , $request -> password , $request -> droits );
2015-10-22 16:55:26 +00:00
} else
$answer -> request = 'param_error' ;
break ;
2015-10-22 08:29:43 +00:00
2015-10-21 20:56:56 +00:00
/***********/
/* 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' ;
}
?>