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 49745f49a3

@ -15,6 +15,8 @@ $vues['main'] = 'View/src/pages/Main.php';
$vues['presentation'] = 'View/src/pages/Presentation.html'; $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['signUp'] = 'View/src/pages/LogSign/SignUp.php';
$vues['mail'] = 'View/src/pages/LogSign/Mail.php';
$vues['confirm'] = 'View/src/pages/LogSign/Confirm.php';
$vues['test'] = 'View/src/pages/FirstTests/FirstTest1.html'; $vues['test'] = 'View/src/pages/FirstTests/FirstTest1.html';
$vues['next'] = 'View/src/pages/FirstTests/FirstTest'; $vues['next'] = 'View/src/pages/FirstTests/FirstTest';
$vues['admin'] = 'View/src/pages/Admin/Admin.php'; $vues['admin'] = 'View/src/pages/Admin/Admin.php';
@ -33,6 +35,10 @@ $vues['queue'] = 'View/src/pages/Multijoueur/Queue.php';
$vues['enigmePage'] = 'View/src/pages/Enigme/EnigmePage.php'; $vues['enigmePage'] = 'View/src/pages/Enigme/EnigmePage.php';
// Server // Server
$server = './server.js'; $server = './server.js';
$serverAdress = "http://82.165.180.114";
$port= "3000";
//modules
$modules = 'node_module/';
//Error //Error
$vues['erreur'] = 'View/src/pages/Erreur.php'; $vues['erreur'] = 'View/src/pages/Erreur.php';

@ -27,27 +27,6 @@ class AdminController extends UserController
case "goToTest": case "goToTest":
$this->goToTest(); $this->goToTest();
break; break;
case "goToChouette":
$this->goToChouette();
break;
case "goToCesarEncrypt":
$this->goToCesarEncrypt();
break;
case "goToCesarDecrypt":
$this->goToCesarDecrypt();
break;
case "goToChuckNorris":
$this->goToChuckNorris();
break;
case "goToHanoi":
$this->goToHanoi();
break;
case "goToTrianglePascal":
$this->goToTrianglePascal();
break;
case "goToDoubleElement":
$this->goToDoubleElement();
break;
case "goToNext": case "goToNext":
$this->goToNext(); $this->goToNext();
break; break;

@ -4,7 +4,7 @@ class FrontController
function __construct() function __construct()
{ {
try { try {
global $error, $view, $rep; global $error, $vues, $rep;
$nettoyage = new Nettoyage(); $nettoyage = new Nettoyage();
session_start(); session_start();
// Check role permissions // Check role permissions
@ -23,7 +23,7 @@ class FrontController
new UserController(); new UserController();
} else if (method_exists('UserController', $action) == false) { } else if (method_exists('UserController', $action) == false) {
$error = "Action non valide " . $action; $error = "Action non valide " . $action;
require($rep . $view['erreur']); require($rep . $vues['erreur']);
} else { } else {
//echo "action user valide"; //echo "action user valide";
$_REQUEST['action'] = $action; $_REQUEST['action'] = $action;
@ -36,7 +36,7 @@ class FrontController
new AdminController(); new AdminController();
} else if (method_exists('AdminController', $action) == false) { } else if (method_exists('AdminController', $action) == false) {
$error = "Action non valide" . $action; $error = "Action non valide" . $action;
require($rep . $view['erreur']); require($rep . $vues['erreur']);
} else { } else {
//echo "action admin valide"; //echo "action admin valide";
$_REQUEST['action'] = $action; $_REQUEST['action'] = $action;
@ -49,7 +49,7 @@ class FrontController
} }
} catch (Exception $e) { } catch (Exception $e) {
$error = $e->getMessage(); $error = $e->getMessage();
require($rep . $view['erreur']); require($rep . $vues['erreur']);
} }
} }
} }

@ -109,13 +109,16 @@ class UserController
public function goToQueue() public function goToQueue()
{ {
try { try {
global $rep, $vues, $error; global $rep, $vues, $error; //$serverAdress,$port;
require($rep . $vues['queue']); require($rep . $vues['queue']);
$model = new UserModel(); $model = new UserModel();
$model->addToQueue(); $model->addToQueue();
$userGroup = $model->findUserGroup(); $userGroup = $model->findUserGroup();/*.$serverAdress.$port*/
$io = getenv('io'); echo '<script src="node_modules/socket.io/client-dist/socket.io.js">
$io->to($userGroup)->emit("launchGame"); socket = io(http://82.165.180.114:3000);
socket.join($userGroup);
socket.to($userGroup).emit("launchGame");
</script>';
} catch (Exception $e) { } catch (Exception $e) {
$error = $e->getMessage(); $error = $e->getMessage();
require($rep . $vues['erreur']); require($rep . $vues['erreur']);

@ -28,9 +28,18 @@ class VisitorController
case "goToSignUp": case "goToSignUp":
$this->goToSignUp(); $this->goToSignUp();
break; break;
case "goToMail":
$this->goToMail();
break;
case "goToQueue": case "goToQueue":
$this->goToLogin(); $this->goToLogin();
break; break;
case "sendMail":
$this->sendMail();
break;
case "goToReset":
$this->goToReset();
break;
default: default:
$error = "Action non valide"; $error = "Action non valide";
require($rep . $vues['erreur']); require($rep . $vues['erreur']);
@ -74,6 +83,16 @@ class VisitorController
require($rep . $vues['erreur']); require($rep . $vues['erreur']);
} }
} }
public function goToMail()
{
try {
global $rep, $vues;
require($rep . $vues['mail']);
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
public function signUp() public function signUp()
{ {
try { try {
@ -102,4 +121,30 @@ class VisitorController
require($rep . $vues['erreur']); require($rep . $vues['erreur']);
} }
} }
public function sendMail()
{
$nettoyage = new Nettoyage();
$code = 10;
$to = $nettoyage->cleanEmail($_POST['email']);
$subject = 'Reset your password';
$message = 'Hello, you can reset your password here : http://82.165.180.114/index.php?action=goToConfirm&code='.$code;
$headers = 'From: scripted@gmail.com' . "\r\n" .
// 'Reply-To: sender@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
$this->goToMail();
}
public function goToConfirm()
{
try {
global $rep, $vues;
require($rep . $vues['confirm']);
} catch (Exception $e) {
$error = $e->getMessage();
require($rep . $vues['erreur']);
}
}
} }

@ -84,6 +84,15 @@ async function submit(){
{ {
$old = $this->enigme_gateway->findById($id)[0]; $old = $this->enigme_gateway->findById($id)[0];
$ordre = $old->getOrdre(); $ordre = $old->getOrdre();
$nom = trim($nom);
$enonce = trim($enonce);
$aide = trim($aide);
$rappel = trim($rappel);
$exemple = trim($exemple);
$test = trim($test);
echo $test;
$solution = trim($solution);
$prompt = trim($prompt);
$enigme = new Enigme($id,$nom, $enonce, $aide, $rappel, $exemple, $solution, $test, $ordre, 0, 0, $prompt); $enigme = new Enigme($id,$nom, $enonce, $aide, $rappel, $exemple, $solution, $test, $ordre, 0, 0, $prompt);
$this->enigme_gateway->update($enigme); $this->enigme_gateway->update($enigme);
$js = fopen("View/src/JS/$nom.js", "w"); $js = fopen("View/src/JS/$nom.js", "w");

@ -52,11 +52,6 @@ class UserModel
} }
echo '8'; echo '8';
$this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'], $partie); $this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'], $partie);
$userGroup = (string)$partie->getIdPartie();
echo '<script>
socket.join($userGroup);
io.to($userGroup).emit("launchGame");
</script>';
} }
public function findUserGroup() : int { public function findUserGroup() : int {

@ -24,6 +24,10 @@ body {
background-color: #000; background-color: #000;
} }
a{
text-decoration: none !important;
}
.login-box { .login-box {
position: absolute; position: absolute;
top: 50%; top: 50%;

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

@ -64,14 +64,12 @@
<div class="mb-3"> <div class="mb-3">
<label for="" class="form-label">Test</label> <label for="" class="form-label">Test</label>
<textarea class="form-control" name="test" id="test" rows="3" required></textarea> <textarea class="form-control" name="test" id="test" rows="3" required></textarea>
<!-- <div class="ace rounded" id="editor" name="test"></div> -->
</div> </div>
</div> </div>
<div class="col"> <div class="col">
<div class="mb-3"> <div class="mb-3">
<label for="" class="form-label">Prompt, ce qu'il sera écrit par défaut dans l'éditeur</label> <label for="" class="form-label">Prompt, ce qu'il sera écrit par défaut dans l'éditeur</label>
<textarea class="form-control" name="prompt" id="prompt" rows="3" required></textarea> <textarea class="form-control" name="prompt" id="prompt" rows="3" required></textarea>
<!-- <div class="ace rounded" id="editor" name="test"></div> -->
</div> </div>
</div> </div>
<button class="left" type="submit"> <button class="left" type="submit">

@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Login</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css"
integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous" />
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js"
integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/"
crossorigin="anonymous"></script>
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
<link rel="stylesheet" href="./View/src/CSS/Login.css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
</head>
<body>
<div class="container user-select-none">
<div class="login-box col-12" id="form">
<div class="row mb-4 d-flex align-items-center">
<div class="col-2 justify-content-center">
<a class="material-icons p-0 m-0" id="home" href="index.php?action=goToHome"
style="font-size: 30px; color: white; text-decoration:none; width: fit-content;">home</a>
</div>
<div class="col d-flex justify-content-center align-content-center">
<h2 class="text-uppercase font-weight-bold text-center" id="h2" style="width:fit-content;">Password
Reset</h2>
</div>
<div class="col-2"></div>
</div>
<div class="col text-center">
<p> Your password was reset go to your mail and enter the validation code.</p>
</div>
<form class="mb-5" action="index.php?action=goToHome" method="POST">
<div class="user-box mb-5 position-relative">
<input type="text" id="code" name="code" required="" />
<label>Code</label>
</div>
<div class="d-flex justify-content-around mt-5">
<button class="py-2 px-3" type="submit">
<span></span>
<span></span>
<span></span>
<span></span>
Reset Password
</button>
</div>
</form>
<div class="d-flex justify-content-around">
<a href="index.php?action=goToLogin" class="text-center" style="color: #5fc198;">Login</a>
<a href="index.php?action=goToSignUp" class="text-center" style="color: #5fc198;">Sign up</a>
</div>
</div>
</div>
</body>
</html>

@ -31,10 +31,13 @@
<input type="text" id="email" name="email" required="" /> <input type="text" id="email" name="email" required="" />
<label>Email</label> <label>Email</label>
</div> </div>
<div class="user-box mb-5 position-relative"> <div class="user-box position-relative">
<input type="password" id="password" name="password" required="" /> <input type="password" id="password" name="password" required="" />
<label>Password</label> <label>Password</label>
</div> </div>
<div class="user-box position-relative">
<a href="index.php?action=goToMail" style="color : #5fc198">Mots de passe oucliée ?</a>
</div>
<div class="d-flex justify-content-around mt-5"> <div class="d-flex justify-content-around mt-5">
<button class="py-2 px-3" type="submit"> <button class="py-2 px-3" type="submit">
<span></span> <span></span>

@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Login</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css"
integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous" />
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js"
integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/"
crossorigin="anonymous"></script>
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
<link rel="stylesheet" href="./View/src/CSS/Login.css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
</head>
<body>
<div class="container user-select-none">
<div class="login-box col-12" id="form">
<div class="row mb-4 d-flex align-items-center">
<div class="col-2 justify-content-center">
<a class="material-icons p-0 m-0" id="home" href="index.php?action=goToHome"
style="font-size: 30px; color: white; text-decoration:none; width: fit-content;">home</a>
</div>
<div class="col d-flex justify-content-center align-content-center">
<h2 class="text-uppercase font-weight-bold text-center" id="h2" style="width:fit-content;">Password
Reset</h2>
</div>
<div class="col-2"></div>
</div>
<div class="col text-center">
<p> Enter your email address and we'll send you an email with instructions to reset your password.</p>
</div>
<form class="mb-5" action="index.php?action=goToHome" method="POST">
<div class="user-box mb-5 position-relative">
<input type="text" id="email" name="email" required="" />
<label>Email</label>
</div>
<div class="d-flex justify-content-around mt-5">
<button class="py-2 px-3" type="submit">
<span></span>
<span></span>
<span></span>
<span></span>
Reset Password
</button>
</div>
</form>
<div class="d-flex justify-content-around">
<a href="index.php?action=goToLogin" class="text-center" style="color: #5fc198;">Login</a>
<a href="index.php?action=goToSignUp" class="text-center" style="color: #5fc198;">Sign up</a>
</div>
</div>
</div>
</body>
</html>

@ -2,7 +2,6 @@
require_once('./Config/Config.php'); require_once('./Config/Config.php');
require_once('./Config/Autoload.php'); require_once('./Config/Autoload.php');
Autoload::charger(); Autoload::charger();
$control = new FrontController(); $control = new FrontController();
//session_regenerate_id(true); //session_regenerate_id(true);

@ -0,0 +1,6 @@
{
"name": "WEB",
"lockfileVersion": 2,
"requires": true,
"packages": {}
}

@ -0,0 +1,6 @@
{
"name": "WEB",
"lockfileVersion": 2,
"requires": true,
"packages": {}
}

@ -0,0 +1,16 @@
import { createServer } from "http";
import { Server } from "socket.io";
const httpServer = createServer();
const io = new Server(httpServer, {
// options
});
io.on('connection', (socket) => {
console.log("connection de l'utilisateur à l'id ". socket.id);
});
io.on('launchGame' , function () {
console.log('launch the game');
location.reload();
});
httpServer.listen(3000);

@ -1,27 +0,0 @@
<?php
// Créer l'application express
$app = require('/usr/local/lib/node_modules/express');
// Créer le serveur
$server = $app->listen(3000);
// Créer l'objet socket.io en lui passant le serveur
$io = require('/usr/local/lib/node_modules/socket.io')($server);
// Quand un utilisateur se connecte
$io->on('connection', function ($socket) {
echo "connection de l'utilisateur à l'id " . $socket->id;
});
// Quand un utilisateur lance le jeu
$io->on('launchGame', function () {
echo 'launch the game';
header('Location: index.php');
});
// Exporter l'objet socket.io
putenv("io=$io");
echo 'iolisten';
?>

@ -9,6 +9,7 @@
"socket.io": "^4.5.4" "socket.io": "^4.5.4"
}, },
"type" : "module",
"nodemonConfig": { "nodemonConfig": {
"watch": [ "watch": [
"server.js" "server.js"

Loading…
Cancel
Save