Merge branch 'master' of https://codefirst.iut.uca.fr/git/nathan.boileau/Scripted
continuous-integration/drone/push Build is passing Details

ServeurDeTest
nathan boileau 2 years ago
commit c1c24a10e5

@ -0,0 +1,14 @@
# Affiche Hello world !
print("Hello World !")
# Declaration de variable
num = 1
string = "Oi"
liste=[num,string]
print(liste)
# Utilisation de fonction

@ -34,7 +34,7 @@ class Autoload
{
global $rep;
$filename = $class.'.php';
$dir =array('Model/','./','Config/','Controller/');
$dir =array('Model/','./','Config/','Controller/','Metier/', 'Factory/');
foreach ($dir as $d){
$file=$rep.$d.$filename;
//echo $file;

@ -23,7 +23,7 @@ $sel = "JeSuisUnSeldeHashageEtJeSuisUniqueEtTresSecuriseEtJeSuisTresLong";
//Page
$vues['main'] = 'View/src/pages/Main.php';
$vues['presentation'] = 'View/src/pages/Presentation.html';
$vues['login'] = '../View/src/pages/LogSign/Login.php';
$vues['login'] = '/View/src/pages/LogSign/Login.php';
$vues['signUp'] = 'View/src/pages/LogSign/SignUp.php';
$vues['enigme'] = 'View/src/pages/Palindrome.html';

@ -27,23 +27,33 @@ class Connection extends SQLite3
$this->enableExceptions(true);
}
public function executeQuery(string $query, array $parameters = []) :bool {
public function executeQuery(string $query, array $parameters = []): bool
{
$this->stmt = parent::prepare($query);
foreach ($parameters as $name => $value) {
$this->stmt->bindValue($name, $value[0], $value[1]);
}
$this->result=$this->stmt->execute();
return $this->result;
$this->result = $this->stmt->execute();
if ($this->result == false) {
$this->result->finalize();
return false;
} else {
$this->result->finalize();
return true;
}
}
public function getResults(): array {
return $this->result->fetchArray();
public function getResults(): array
{
$resultArray = array();
$multiArray = array();
while($resultArray != false){
$resultArray = $this->result->fetchArray(SQLITE3_ASSOC); //read next row
array_push($multiArray, $resultArray); //insert all rows to $multiArray
}
if ($multiArray == NULL)
return array();
else
return $multiArray;
}
}
// class Connection extends SQLite3{
// function __construct()
// {
// $this->open("./Model/scripted.db");
// }
// }

@ -7,9 +7,16 @@ class EnigmeGateway
* @param Connection $con
*/
public function __construct(Connection $con)
public function __construct()
{
global $dsn, $rep, $vues, $error;
try{
$con = new Connection($dsn);
$this->con = $con;
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
/**
@ -44,6 +51,23 @@ class EnigmeGateway
));
}
public function findMultiEnigma() : array
{
$query = "SELECT * FROM Enigme
WHERE points IS NOT NULL OR points != 0";
$this->con->executeQuery($query);
$tabEnigme=EnigmeFactory::create($this->con->getResults());
return $tabEnigme;
}
public function findSoloEnigma(){
$query = "SELECT * FROM Enigme
WHERE points IS NULL OR points = 0";
$this->con->executeQuery($query);
$tabEnigme=EnigmeFactory::create($this->con->getResults());
return $tabEnigme;
}
public function findById(string $idEnigme) : array
{
$query="SELECT * FROM Enigme WHERE idEnigme =:idEnigme";

@ -3,16 +3,34 @@ class FrontController
{
function __construct()
{
global $rep, $vues, $error;
session_start();
// $role=$_SESSION['role'];
// $action=$_REQUEST['action'];
echo "frontController";
try {
global $error, $view, $rep;
session_start();
// Check role permissions
if (isset($_SESSION['role'])) {
$role = $_SESSION['role'];
} else {
$role = "visitor";
}
// Check if action exists
$action = $_REQUEST['action'];
if ($role == "user") {
if ($action == NULL) {
new UserController();
}
else if (method_exists('UserModel', $action) == false) {
$error = "Action non valide " . $action;
require($rep . $view['erreur']);
} else {
new UserController();
}
} else {
new VisitorController();
}
} catch (Exception $e) {
$error = $e->getMessage();
require ($rep . $vues['erreur']);
require($rep . $view['erreur']);
}
}
}

@ -6,9 +6,16 @@ class PartieGateway
/**
* @param Connection $con
*/
public function __construct(Connection $con)
public function __construct()
{
global $dsn, $rep, $vues, $error;
try{
$con = new Connection($dsn);
$this->con = $con;
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
/**

@ -1,182 +1,45 @@
<?php
// Mettre le xdebug dans php.ini
class UserController
{
private Connection $con;
function __construct() {
try{
echo "UserController";
function __construct()
{
try {
global $dsn, $rep, $vues, $error;
$this->con=new Connection($dsn);
echo "USconection";
$action=$_REQUEST['action'];
switch($action) {
$model = new UserModel();
$action = $_REQUEST['action'];
switch ($action) {
case NULL:
$this->goToHome();
break;
case "signUp":
$this->signUp();
break;
case "login":
$this->login();
$model->goToHome();
break;
case "goToPresentation":
$this->goToPresentation();
$model->goToPresentation();
break;
case "goToHome":
$this->goToHome();
break;
case "goToLogin":
$this->goToLogin();
break;
case "goToSignUp":
$this->goToSignUp();
$model->goToHome();
break;
case "goToEnigme":
$this->goToEnigme();
$model->goToEnigme();
break;
case "goToQueue":
$this->goToQueue();
$model->goToQueue();
break;
case "logout":
$model->logout();
break;
default:
$error = "Action non valide";
require($rep . $vues['erreur']);
break;
}
} catch (PDOException $e)
{
} catch (PDOException $e) {
$error = $e->getMessage();
require ($rep.$vues['erreur']);
}catch (Exception $e2)
{
require($rep . $vues['erreur']);
} catch (Exception $e2) {
$error = $e2->getMessage();
require ($rep.$vues['erreur']);
}
}
private function signUp() {
global $rep, $vues, $sel, $error;
try {
$gateway = new UtilisateurGateway($this->con);
$validation = new Validation();
if (! $validation->ValidateEmail($_REQUEST['email'])) {
$error = "Email invalides.";
throw (new Exception("Email non valide"));
}
if(! $validation->ValidateUsername($_REQUEST['username'])){
$error = "Nom d'utilisateur invalides. Il ne doit pas contenir de caractère spéciaux.";
throw(new Exception("Pseudo non valide"));
}
if(! $validation->ValidatePassword($_REQUEST['password'])){
$error = "Mots de passe invalides. Il ne doit pas dépasser 100 caractères.";
throw(new Exception("Mot de passe non valide"));
}
$j = $gateway->getUtilisateurByEmail($_REQUEST['email']);
if ($j->getEmail() != "null") {
$error = "Email déjà utilisé.";
throw (new Exception("Email déjà utilisé"));
}
$password = password_hash($_REQUEST['password'], PASSWORD_DEFAULT);
$estAdmin = $gateway->getEstAdminByEmail($_REQUEST['email']);
$Utilisateur = new Utilisateur($_REQUEST['email'], $_REQUEST['username'], $password, $estAdmin);
$gateway->insert($Utilisateur);
$_SESSION['connected'] = 'true';
$_SESSION['role'] = 'utilisateur';
require ($rep.$vues['main']);
}catch (PDOException $e)
{
$error = "Erreur de connexion à la base de données.";
require ($rep.$vues['erreur']);
}
catch (Exception $e){
require($rep.$vues['erreur']);
}
}
private function login(){
global $rep, $vues, $sel, $error;
try {
$gateway = new UtilisateurGateway($this->con);
$Utilisateur = $gateway->getUtilisateurByEmail($_REQUEST['email']);
if ($Utilisateur->getEmail() == null){
$error = "Utilisateur non trouvé.";
throw new Exception("Utilisateur introuvable");
}
$mdp = $gateway->getMdpByEmail($_REQUEST['email']);
if (password_verify($mdp, $_REQUEST['password'])){
$error = "Mot de passe incorrect.";
throw new Exception("Mot de passe invalide");
}
$estAdmin =$gateway->getEstAdminByEmail($_REQUEST['email']);
if ($estAdmin == true) {
$_SESSION['role'] = "admin";
}
else{
$_SESSION['role'] = "utilisateur";
}
$_SESSION['connected'] = 'true';
require ($rep.$vues['main']);
}catch (Exception $e){
require($rep.$vues['erreur']);
}
}
private function goToPresentation() {
global $rep, $vues, $error;
try {
require ($rep.$vues['presentation']);
}catch (Exception $e){
$error = "Erreur Inconnue";
require($rep.$vues['erreur']);
}
}
private function goToHome() {
global $rep, $vues, $error;
try {
require ($rep.$vues['main']);
}catch (Exception $e){
$error = "404";
require($rep.$vues['erreur']);
}
}
private function goToLogin() {
global $rep, $vues, $error;
try {
require ($rep.$vues['login']);
}catch (Exception $e){
$error = "404";
require($rep.$vues['erreur']);
}
}
private function goToSignUp() {
global $rep, $vues, $error;
try {
require ($rep.$vues['signUp']);
}catch (Exception $e){
$error = "404";
require($rep.$vues['erreur']);
}
}
private function goToEnigme() {
global $rep, $vues, $error;
try {
require ($rep.$vues['enigme']);
}catch (Exception $e){
$error = "404";
require($rep.$vues['erreur']);
}
}
private function goToQueue() {
global $rep, $vues, $error;
try {
require ($rep.$vues['Queue']);
}catch (Exception $e){
$error = "404";
require($rep.$vues['erreur']);
require($rep . $vues['erreur']);
}
}
}

@ -1,5 +1,4 @@
<?php
include_once "../Factory/PartieFactory.php";
class UtilisateurGateway
{
private Connection $con;
@ -7,8 +6,15 @@ class UtilisateurGateway
/**
* @param Connection $con
*/
public function __construct(Connection $con){
public function __construct(){
global $dsn, $rep, $vues, $error;
try{
$con = new Connection($dsn);
$this->con = $con;
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
/**
@ -20,18 +26,18 @@ class UtilisateurGateway
}
public function insert(Utilisateur $utilisateur) : void{
$query = "INSERT INTO Utilisateur VALUE (:email,:pseudo,:mdp,:estAdmin)";
$query = "INSERT INTO Utilisateur VALUES (:email,:pseudo,:mdp,:estAdmin)";
$this->con->executeQuery($query, array(
':email' => array($utilisateur->getEmail(),PDO::PARAM_STR),
':pseudo' => array($utilisateur->getPseudo(),PDO::PARAM_STR),
':mdp' => array($utilisateur->getMdp(),PDO::PARAM_STR),
':estAdmin' => array($utilisateur->getEstAdmin(),PDO::PARAM_BOOL)));
':email' => array($utilisateur->getEmail(),SQLITE3_TEXT),
':pseudo' => array($utilisateur->getPseudo(),SQLITE3_TEXT),
':mdp' => array($utilisateur->getMdp(),SQLITE3_TEXT),
':estAdmin' => array($utilisateur->getEstAdmin(),SQLITE3_INTEGER)));
}
public function delete(string $email) : void{
$query = "DELETE FROM utilisateur WHERE email=:email";
$this->con->executeQuery($query, array(
':email' => array($email ,PDO::PARAM_STR)
':email' => array($email ,SQLITE3_TEXT)
));
}
@ -39,26 +45,17 @@ class UtilisateurGateway
global $error;
$query = "SELECT * FROM Utilisateur WHERE email=:email";
$this->con->executeQuery($query, array(
':email' => array($email,PDO::PARAM_STR)
':email' => array($email,SQLITE3_TEXT)
));
$results=$this->con->getResults();
foreach ($results as $row) {
$email=$row['email'];
$pseudo=$row['pseudo'];
$mdp=$row['mdp'];
$estAdmin=$row['estAdmin'];
}
if ($results == null){
return new Utilisateur("null", "null", "null", false);
}
return new Utilisateur($email, $pseudo, $mdp,false);
return UtilisateurFactory::createUtilisateur($results);
}
public function getMdpByEmail(string $email) : string{
global $error;
$query = "SELECT mdp FROM Utilisateur WHERE email=:email";
$this->con->executeQuery($query, array(
':email' => array($email,PDO::PARAM_STR)
':email' => array($email,SQLITE3_TEXT)
));
$results=$this->con->getResults();
foreach ($results as $row) {
@ -74,12 +71,10 @@ class UtilisateurGateway
public function getEstAdminByEmail(string $email) : bool{
$query = "SELECT estAdmin FROM Utilisateur WHERE email=:email";
$this->con->executeQuery($query, array(
':email' => array($email,PDO::PARAM_STR)
':email' => array($email,SQLITE3_TEXT)
));
$results=$this->con->getResults();
foreach ($results as $row) {
$estAdmin=$row['estAdmin'];
}
$estAdmin=$results['estAdmin'];
return $estAdmin;
}

@ -0,0 +1,45 @@
<?php
class VisitorController
{
private Connection $con;
function __construct()
{
try {
global $dsn, $rep, $vues, $error;
$model = new VisitorModel();
$action = $_REQUEST['action'];
switch ($action) {
case NULL:
$model->goToHome();
break;
case "signUp":
$model->signUp();
break;
case "login":
$model->login();
break;
case "goToHome":
$model->goToHome();
break;
case "goToLogin":
$model->goToLogin();
break;
case "goToSignUp":
$model->goToSignUp();
break;
default:
$error = "Action non valide";
require($rep . $vues['erreur']);
break;
}
} catch (PDOException $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
} catch (Exception $e2) {
$error = $e2->getMessage();
require($rep . $vues['erreur']);
}
}
}

@ -1,6 +1,4 @@
<?php
include_once "EnigmeFactory.php";
include_once "../Model/Partie.php";
class PartieFactory{
public static function createPartieMulti($idMax,$resultsEnigme) : Partie
{

@ -0,0 +1,26 @@
<?php
class UtilisateurFactory
{
public static function createUtilisateur(array $results){
if ($results == null){
return new Utilisateur("null", "null", "null", false);
}
foreach($results as $row)
{
$email = $row['email'];
$pseudo=$row['pseudo'];
$mdp = $row['mdp'];
$estAdmin = $row['estAdmin'];
}
return new Utilisateur($email, $pseudo, $mdp, $estAdmin);
}
public static function createTabUtilisateur(array $results){
$tabUtilisateur=array();
foreach($results as $row)
{
$tabUtilisateur[]=new Utilisateur($row['email'], $row['pseudo'], $row['mdp'], $row['estAdmin']);
}
return $tabUtilisateur;
}
}

@ -0,0 +1,70 @@
<?php
class UserModel
{
private EnigmeGateway $enigme_gateway;
private PartieGateway $partie_gateway;
private UtilisateurGateway $utilisateur_gateway;
function __construct()
{
try {
global $error, $view, $rep;
$this->enigme_gateway = new EnigmeGateway();
$this->partie_gateway = new PartieGateway();
$this->utilisateur_gateway = new UtilisateurGateway();
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $view['erreur']);
}
}
public function goToPresentation()
{
global $rep, $vues, $error;
try {
require($rep . $vues['presentation']);
} catch (Exception $e) {
$error = "Erreur Inconnue";
require($rep . $vues['erreur']);
}
}
public function goToHome()
{
global $rep, $vues, $error;
try {
require($rep . $vues['main']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToEnigme()
{
global $rep, $vues, $error;
try {
require($rep . $vues['enigme']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToQueue()
{
global $rep, $vues, $error;
try {
require($rep . $vues['Queue']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function logout()
{
$_SESSION['role'] = 'visitor';
header('Location: index.php');
}
}

@ -0,0 +1,117 @@
<?php
class VisitorModel
{
private EnigmeGateway $enigme_gateway;
private PartieGateway $partie_gateway;
private UtilisateurGateway $utilisateur_gateway;
function __construct()
{
try {
global $error, $view, $rep;
$this->enigme_gateway = new EnigmeGateway();
$this->partie_gateway = new PartieGateway();
$this->utilisateur_gateway = new UtilisateurGateway();
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $view['erreur']);
}
}
public function signUp()
{
global $rep, $vues, $sel, $error;
try {
$validation = new Validation();
if (!$validation->ValidateEmail($_REQUEST['email'])) {
$error = "Email invalides.";
throw (new Exception("Email non valide"));
}
if (!$validation->ValidateUsername($_REQUEST['username'])) {
$error = "Nom d'utilisateur invalides. Il ne doit pas contenir de caractère spéciaux.";
throw (new Exception("Pseudo non valide"));
}
if (!$validation->ValidatePassword($_REQUEST['password'])) {
$error = "Mots de passe invalides. Il ne doit pas dépasser 100 caractères.";
throw (new Exception("Mot de passe non valide"));
}
$j = $this->utilisateur_gateway->getUtilisateurByEmail($_REQUEST['email']);
if ($j->getEmail() != "null") {
$error = "Email déjà utilisé.";
throw (new Exception("Email déjà utilisé"));
}
$password = password_hash($_REQUEST['password'] . $sel, PASSWORD_DEFAULT);
$Utilisateur = new Utilisateur($_REQUEST['email'], $_REQUEST['username'], $password, false);
$this->utilisateur_gateway->insert($Utilisateur);
$_SESSION['role'] = 'user';
require($rep . $vues['main']);
} catch (PDOException $e) {
$error = "Erreur de connexion à la base de données.";
require($rep . $vues['erreur']);
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
public function login()
{
global $rep, $vues, $sel, $error;
try {
$Utilisateur = $this->utilisateur_gateway->getUtilisateurByEmail($_REQUEST['email']);
if ($Utilisateur->getEmail() == "null") {
$error = "Utilisateur non trouvé.";
throw new Exception("Utilisateur introuvable");
}
$mdp = $this->utilisateur_gateway->getMdpByEmail($_REQUEST['email']);
if (password_verify($mdp, $_REQUEST['password'] . $sel)) {
$error = "Mot de passe incorrect.";
throw new Exception("Mot de passe invalide");
}
$estAdmin = $this->utilisateur_gateway->getEstAdminByEmail($_REQUEST['email']);
if ($estAdmin == true) {
$_SESSION['role'] = "admin";
} else {
$_SESSION['role'] = "user";
}
$_SESSION['connected'] = 'true';
require($rep . $vues['main']);
} catch (Exception $e) {
require($rep . $vues['erreur']);
}
}
public function goToHome()
{
global $rep, $vues, $error;
try {
require($rep . $vues['main']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToLogin()
{
global $rep, $vues, $error;
try {
require($rep . $vues['login']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
public function goToSignUp()
{
global $rep, $vues, $error;
try {
require($rep . $vues['signUp']);
} catch (Exception $e) {
$error = "404";
require($rep . $vues['erreur']);
}
}
}

Binary file not shown.

@ -0,0 +1,12 @@
//~ Function that test the user code
async function submit(){
var test = editor.getValue();
exec("print('Hello World !')", "code");
exec(test, "solution");
result.innerHTML = "Test en cours...";
await new Promise(r => setTimeout(r, 1500));
check();
}

@ -0,0 +1,10 @@
async function submit(){
var test = editor.getValue();
exec("print([1,'Oui'])", "code");
exec(test, "solution");
result.innerHTML = "Test en cours...";
await new Promise(r => setTimeout(r, 1500));
check();
}

@ -39,7 +39,7 @@
class="mb-3 text-uppercase d-flex justify-content-center align-items-center"
style="width: 260px; height: 50px"
<?php
if (isset($_SESSION['connected']) && $_SESSION['connected'] == 'true'){
if (isset($_SESSION['role']) && $_SESSION['role'] == 'user'){
echo 'href="index.php?action=goToPresentation"';
}
else{

@ -10,7 +10,7 @@
integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="../CSS/Presentation.css" />
<link rel="stylesheet" href="View/src/CSS/Presentation.css" />
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
@ -21,7 +21,7 @@
integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/"
crossorigin="anonymous"
></script>
<script defer src="../JS/Presentation.js"></script>
<script defer src="View/src/JS/Presentation.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark fixed-top">
@ -43,7 +43,7 @@
</div>
</nav>
<img src="../../assets/img/BGPres.png" class="img-fluid" />
<img src="View/assets/img/BGPres.png" class="img-fluid" />
<div class="container pt-5">
<div class="col-12">
@ -81,7 +81,7 @@
<div class="col-3" id="fox">
<img
src="../../assets/img/Foxy.png"
src="View/assets/img/Foxy.png"
alt="Logo"
class="img-fluid rounded-circle moving-fox"
style="border: 2px solid #44fff6"

@ -3,20 +3,6 @@ require_once('./Config/Config.php');
require_once('./Config/Autoload.php');
Autoload::charger();
// $db = new Connection();
// $stm=$db->prepare("INSERT INTO Utilisateur VALUES (:email, :password, :pseudo, :admin)");
// $stm->bindValue(':email', "e",SQLITE3_TEXT);
// $stm->bindValue(':password', "e" ,SQLITE3_TEXT);
// $stm->bindValue(':pseudo', "e", SQLITE3_TEXT);
// $stm->bindValue(':admin', 0, SQLITE3_INTEGER);
// $stm->execute();
// $res = $db->query('SELECT * FROM Utilisateur');
// Select all the users in the database
// while ($row = $res->fetchArray()) {
// echo $row['email'] . " " . $row['password'] . " " . $row['pseudo'] . " " . $row['admin'] . " ";
// }
$control = new FrontController();
//session_regenerate_id(true);

Loading…
Cancel
Save