level_1 ){ /****************************/ /* authentification (login) */ /****************************/ case 'authentification': $areSetParam = isset($request->identifiant) && isset($request->mdp); // les arguments existent $typeOkParam = $areSetParam && is_string($request->identifiant) && is_string($request->mdp); // ils sont tous 2 des string $nEmptyParam = $typeOkParam && strlen($request->identifiant) > 0 && strlen($request->mdp) > 0; // d'au moins 1 caractère $identifiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->identifiant); // identifiant bon format $mdpCheck = $identifiantCheck && preg_match('/^[\w -]{4,100}$/i', $request->mdp); // mdp bon format if( $mdpCheck ) // si tout les params sont ok $answer->request = user_authentification($request->identifiant, $request->mdp); else{ if ( !$areSetParam ) $answer->request = 'missing_param'; elseif( !$typeOkParam ) $answer->request = 'wrong_type'; elseif( !$nEmptyParam ) $answer->request = 'empty_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( permission('admin') ){ $areSetParam = isset($request->identifiant) && isset($request->prenom) && isset($request->nom) && isset($request->mail) && isset($request->mdp) && isset($request->droits); // les arguments existent $typeOkParam = $areSetParam && is_string($request->identifiant) && is_string($request->prenom) && is_string($request->nom) && is_string($request->mail) && is_string($request->mdp) && is_string($request->droits); // ils sont tous 2 des string $nEmptyParam = $typeOkParam && strlen($request->identifiant) > 0 && strlen($request->prenom) > 0 && is_string($request->nom) && is_string($request->mail) && is_string($request->mdp) && is_string($request->droits); // d'au moins 1 caractère $identifiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->identifiant); // identifiant bon format $prenomCheck = $identifiantCheck && 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 $mailCheck = $nomCheck && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $request->mail); // mail bon format $mdpCheck = $mailCheck && preg_match('/^[\w -]{4,100}$/i', $request->mdp); // mdp bon format $droitsCheck = $mdpCheck && 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->identifiant, $request->prenom, $request->nom, $request->mail, $request->mdp, $request->droits); }else $answer->request = 'param_error'; }else $answer->request = 'permission_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 Identifiant de l'utilisateur * @param password 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 */ 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 || $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'; // on récupère l'année courante (1er sept à 1er sept) // SI (mois < 8) ALORS (annee - 1) SINON (annee) $_SESSION['annee'] = (Date('m', time())<8) ? Date('Y', time()) - 1 : Date('Y', time()); // on défini si le semestre est pair ou non $_SESSION['semestre_pair'] = semestrePair(time()); // 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_numeric($semestre) )// si on a bien récupéré le semestre $_SESSION['semestre'] = ''.$semestre.''; } return 'success'; }else return 'not_in_db'; }else return 'wrong_password'; }else return 'unknown_user'; } /* RETOURNE LES SEMESTRES EN COURS * * détermine si les semestres IMPAIRS ou PAIRS sont en cours * * @$answer->request = isEven VRAI si pair, sinon FAUX (impair) * */ function semestrePair($timestamp=null){ // si $datetime n'est pas défini, on prend la date actuelle if( $timestamp == null ) $timestamp = time(); return Date('m', $timestamp) < 8; } ?>