sid/manager/user.php

322 lines
12 KiB
PHP
Executable File

<?php require_once __ROOT__.'/manager/security.php';
/***********************************************************
* *
* MANAGER DES UTILISATEURS *
* *
************************************************************
* *
* [0] Constantes *
* [1] ROUTAGE de niveau 1 *
* [2] Authentification *
* [a] userlist *
* [b] Connection *
* [c] Déconnection *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
***********************************************************/
class userManager{
/* [1] ROUTAGE DE NIVEAU 1
============================================================*/
public static function switch_level_1($request, $answer){
switch( $request->level_1 ){
/****************************/
/* authentification (login) */
/****************************/
case 'authentification':
$areSetParam = isset($request->identifiant) && isset($request->mdp); // les arguments existent
$identifiantCheck = $areSetParam && checkParam($request->identifiant, 'utilisateur.identifiant'); // identifiant bon format
$mdpCheck = $identifiantCheck && checkParam($request->mdp, 'utilisateur.mdp'); // mdp bon format
if( $mdpCheck ) // si tout les params sont ok
$answer->request = userManager::user_authentification($request->identifiant, $request->mdp);
else{
if ( !$areSetParam ) $answer->request = 'missing_param';
else $answer->request = 'wrong password';
}
break;
/*****************/
/* déconnection */
/*****************/
case 'exit':
$_SESSION['identifiant'] = null; // on supprime l'identifiant
if( $_SESSION['identifiant'] == null )
$answer->request = 'success'; // succès
else
$answer->request = 'error';
break;
/**************************/
/* création d'utilisateur */
/**************************/
case 'create': if( false && permission('admin') ){
$areSetParam = isset($request->identifiant) && isset($request->prenom) && isset($request->nom) && isset($request->mail) && isset($request->mdp) && isset($request->droits); // les arguments existent
$identifiantCheck = $areSetParam && checkParam($request->identifiant, 'utilisateur.identifiant'); // identifiant bon format
$prenomCheck = $identifiantCheck && checkParam($request->prenom, 'utilisateur.prenom'); // prenom bon format
$nomCheck = $prenomCheck && checkParam($request->nom, 'utilisateur.nom'); // nom bon format
$mailCheck = $nomCheck && checkParam($request->mail, 'utilisateur.mail'); // mail bon format
$mdpCheck = $mailCheck && checkParam($request->mdp, 'utilisateur.mdp'); // mdp bon format
$droitsCheck = $mdpCheck && checkParam($request->droits, 'utilisateur.droits'); // droits bon format
if( $droitsCheck ){ // si tout les paramètres sont bons
$answer->request = DataBase::getInstance()->creerUtilisateur($request->identifiant, $request->prenom, $request->nom, $request->mail, $request->mdp, $request->droits);
}else
$answer->request = 'param_error';
}else
$answer->request = 'permission_error';
break;
/******************************************/
/* liste des enseignants avec leurs rôles */
/******************************************/
case 'getListeEnseignantsModules': if( permission('admin') ){
$answer->userlist = DataBase::getInstance()->listeUtilisateursRole($_SESSION['annee']);
$answer->request = 'success';
}else
$answer->request = 'permission_error';
break;
/******************************************/
/* change l'année en cours (master/admin) */
/******************************************/
case 'changeyear': if( permission('master') || permission('admin') ){
if( isset($request->year) && is_numeric($request->year) ){
$_SESSION['annee'] = (String) $request->year;
$answer->request = 'success';
}else
$answer->request = 'param_error';
}else
$answer->request = 'permission_error';
break;
/************************************/
/* modifie le rôle d'un utilisateur */
/************************************/
/*
* identifiant<String> l'UID de l'utilisateur à modifier
*
* admin<Boolean> VRAI si admin, FAUX sinon
* admin<NULL> Si NULL, on ne modifie pas ce champ
*
* master<Boolean> VRAI si référent, FAUX sinon
* master<NULL> Si NULL, on ne modifie pas ce champ
*
* addModule<int> l'UID du mcc_module à lui ajouter en tant que correcteur
* addModule<NULL> Si NULL, on n'ajoute aucun module
*
* delModule<int> l'UID du mcc_module à enlever en tant que correcteur
* delModule<NULL> Si NULL, on n'enlève aucun module
*
*/
case 'updateRole': if( permission('admin') && $_SESSION['annee'] >= DataBase::getInstance()->getSemestreInfoFromTime(time())['annee'] ){
$identifiantCheck = isset($request->identifiant) && checkParam($request->identifiant, 'utilisateur.identifiant'); // identifiant au bon format
$adminCheck = $identifiantCheck && ( is_null($request->admin) || is_bool($request->admin) ); // admin ok
$masterCheck = $adminCheck && ( is_null($request->master) || is_bool($request->master) ); // master ok
$addModuleCheck = $masterCheck && ( is_null($request->addModule) || is_numeric($request->addModule) ); // addModule ok
$delModuleCheck = $addModuleCheck && ( is_null($request->delModule) || is_numeric($request->delModule) ); // delModule ok
$groupeOpt = isset($request->groupe) && is_numeric($request->groupe);
if( $groupeOpt ) $groupe = $request->groupe;
else $groupe = null;
if( $delModuleCheck ){
$response = 'unknown_update';
/* [1] On modifie le caractère "administrateur"
======================================================*/
if( is_bool($request->admin) )
$response = DataBase::getInstance()->setAdmin($request->identifiant, $request->admin);
/* [2] On modifie le caractère "référent"
======================================================*/
if( is_bool($request->master) )
$response = DataBase::getInstance()->setMaster($request->identifiant, $request->master);
/* [3] On ajoute un module en tant que correcteur
======================================================*/
if( $request->addModule != null )
$response = DataBase::getInstance()->correcteurAjouterModule($request->identifiant, $request->addModule, $groupe);
/* [4] On supprime un module en tant que correcteur
======================================================*/
if( $request->delModule != null )
$response = DataBase::getInstance()->correcteurSupprimerModule($request->identifiant, $request->delModule, $groupe);
if( is_bool($response) )
$answer->request = ($response) ? 'success' : 'error';
else
$answer->request = $response;
}else
$answer->request = 'param_error';
}else
$answer->request = 'permission_error';
break;
/***********************/
/* MOTEUR DE RECHERCHE */
/***********************/
case 'search':
//On vérifie qu'on a bien les mots clés
if (isset($request->keywords) && $request->keywords != '') {
//On explode les mots clés
$keys = explode(' ', $request->keywords);
//Pour chaque mot clé on lance une recherche dans la bdd
foreach ($keys as $mot) {
$retour = null;
//On cherche d'abord en fonction du nom...
$retour = DataBase::searchForUsers($mot);
//Si il y a un résultat de recherche alors on le stock dans résultat
if ($retour === false) {
$answer->results = null;
}
else {
$answer->results = $retour;
}
}
}
else {
$answer->request = 'no_keywords';
}
break;
/***********/
/* DEFAULT */
/***********/
default:
$answer->request = 'unknown_level_1';
break;
}
}
/* [2] AUTHENTIFICATION
============================================================*/
/* [a] userlist */
public static 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 @$answer->request = TRUE sinon FALSE
* + mise ajout à @answer
*
* Les variables sessions suivantes sont définies :
* - $_SESSION['permissions']
* - $_SESSION['userid']
* - $_SESSION['username']
*
* @$answer->request = Boolean true si l'utilisateur est ok
*/
public static function user_authentification($username, $password){
// [1] On récupère la liste d'utilisateurs (/src/userlist.json)
$userList = userManager::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 || $userList->{$username}->password == secure_sha1($password) ){
// [4] On récupère les informations dans la base de données
if( $utilInfo = Database::getInstance()->utilisateurInfo($username) ){ // si l'utilisateur est dans le BDD
$_SESSION['identifiant'] = $utilInfo['identifiant'];
$_SESSION['droits'] = explode(',', $utilInfo['droits']);
$_SESSION['sexe'] = ($utilInfo['sexe']=='1') ? 'M' : 'F';
$timestamp = time();
// on récupère l'année scolaire courante ainsi que si le semestre est pair
$infoSemestre = DataBase::getInstance()->getSemestreInfoFromTime($timestamp);
/* On définit l'année courante et si le semestre est pair */
$_SESSION['annee'] = $infoSemestre['annee'];
$_SESSION['semestre_pair'] = (permission('student')) ? $infoSemestre['semestre_pair'] : null;
// on défini le semestre par défaut à NULL
$_SESSION['semestre'] = null;
/* on récupère le semestre courant si c'est un étudiant */
if( permission('student') ){
$semestre = DataBase::studentSemestre( $_SESSION['identifiant'], $_SESSION['semestre_pair'], $_SESSION['annee']);
if( is_array($semestre) ){ // si on a bien récupéré le semestre
$_SESSION['formation'] = (String) $semestre['id_formation'];
$_SESSION['semestre'] = (String) $semestre['id'];
}
}
return 'success';
}else
return 'not_in_db';
}else
return 'wrong_password';
}else
return 'unknown_user';
}
}
?>