Finalisation de la pgae de création des sessions

This commit is contained in:
2023-11-22 15:19:54 +01:00
parent c7c26f984e
commit ee42c93934
726 changed files with 81699 additions and 4092 deletions

139
app.js
View File

@@ -4,10 +4,10 @@ const dotenv = require('dotenv')
const app = express()
const path = require("path")
const publicDir = path.join(__dirname, './public')
const bcrypt = require("bcryptjs")
const bodyParser = require('body-parser')
const dateFormat = require('dateformat');
const uuid = require('uuid');
const functions = require(publicDir + "/functions");
const bcrypt = require("bcrypt")
const saltRounds = 10;
/* Connexion à la BDD MySQL */
@@ -34,49 +34,20 @@ app.use(bodyParser.urlencoded({extended: false}));
app.use(express.json())
function hashPassword(plaintextPassword) {
bcrypt.hash(plaintextPassword, 10)
.then(hash => {
return hash;
})
.catch(err => {
console.log(err)
})
async function recupListeSessions() {
let today = functions.getNowDate("yyyymmdd");
// On récupère la liste des sessions actives et pour lesquelles il reste de la place
db.query('SELECT ID, topic, DATE_FORMAT(scheduled_on, "%d/%m/%Y") as "date", DATE_FORMAT(scheduled_on, "%Hh%i") as "heure", IF(nb_of_attended-nb_of_participants=0, true, false) as "maxAtteint" FROM session WHERE DATE_FORMAT(scheduled_on, "%Y%m%d") >= ?', [today], async (error, result) => {
if(error){ console.log(error); }
return result;
});
}
function comparePassword(plaintextPassword, hash) {
bcrypt.compare(plaintextPassword, hash)
.then(result => {
return result;
})
.catch(err => {
console.log(err)
})
}
function rollback(session, user) {
db.query('DELETE from participation WHERE user=? AND session=?', [user, session], (error, result) => {
if(error){ console.log(error) }
if(result && result.affectedRows > 0) {
db.query('DELETE from user WHERE id=?', [user], (error, result) => {
if(error){ console.log(error) }
if(result && result.affectedRows > 0) {
db.query('UPDATE session SET nb_of_participants = nb_of_participants - 1 WHERE ID=?', [session], (error, result) => {
if(error){ console.log(error) }
if(result && result.affectedRows > 0) {
console.log('Rollback effectué');
}
})
}
})
}
})
}
// ******************************************* Arrivée sur la page d'accueil *******************************************
app.get("/", (req, res) => {
let today = dateFormat(new Date(), "yyyymmdd");
let today = functions.getNowDate("yyyymmdd");
// On récupère la liste des sessions actives et pour lesquelles il reste de la place
db.query('SELECT ID, topic, DATE_FORMAT(scheduled_on, "%d/%m/%Y") as "date", DATE_FORMAT(scheduled_on, "%Hh%i") as "heure", IF(nb_of_attended-nb_of_participants=0, true, false) as "maxAtteint" FROM session WHERE DATE_FORMAT(scheduled_on, "%Y%m%d") >= ?', [today], async (error, result) => {
@@ -87,11 +58,11 @@ app.get("/", (req, res) => {
else {
res.render("login-session", { select: result} );
}
})
});
});
app.get("/index", (req, res) => { res.render("index") });
app.get("/login", (req, res) => { res.render("login") });
app.get("/index", (req, res) => { res.render("index") });
app.get("/login", (req, res) => { res.render("login") });
app.get("/register", (req, res) => {
res.render("register", { session: req.query.s, role: req.query.r})
});
@@ -140,14 +111,17 @@ app.post("/auth/register", (req, res) => {
}
})
let hashedPassword = hashPassword(password);
db.query('INSERT INTO user SET?', {gender : (gender != undefined ? gender : ""), firstname: firstname, name: name, title: title, email: email, nickname : nickname, password: hashedPassword}, (err, result) => {
if(error) {
console.log(error)
} else {
return res.render('login', { session: session, role: role, email: email, nickname: nickname, topic: topic, session_date: sessionDate })
}
})
bcrypt.genSalt(saltRounds, (err, salt) => {
bcrypt.hash(password, salt, (err, hash) => {
db.query('INSERT INTO user SET?', {gender : (gender != undefined ? gender : ""), firstname: firstname, name: name, title: title, email: email, nickname : nickname, password: hash}, (err, result) => {
if(error) {
console.log(error)
} else {
return res.render('login', { session: session, role: role, email: email, nickname: nickname, topic: topic, session_date: sessionDate })
}
})
})
})
})
}
})
@@ -171,7 +145,7 @@ app.post("/auth/check-login-no-security", (req, res) => {
}
else {
// On crée l'utilisateur pour traçabilité
var newUser = uuid.v4();
var newUser = functions.getUuid();
db.query('INSERT INTO user SET?', {id: newUser, nickname : nickname, session: session}, (error, result) => {
if(error){ console.log(error); rollback(session, newUser); }
if(result && result.affectedRows > 0) {
@@ -236,7 +210,7 @@ app.post("/auth/check-login", (req, res) => {
}
userId = result[0].ID;
if (comparePassword(password, result[0].password)) {
if (functions.comparePassword(password, result[0].password)) {
// Le user est connecté avec succès : on vérifie qu'il n'est pas déjà inscrit à la session et si pas le cas, on l'inscrit et on incrémente le compteur des participants
db.query('SELECT * FROM participation WHERE user = ?', [userId], async (error, result) => {
if(error) {
@@ -279,12 +253,10 @@ app.post("/auth/check-session", (req, res) => {
const { session, session_password, role } = req.body
let listeSessions;
let today = dateFormat(new Date(), "yyyymmdd");
let today = functions.getNowDate("yyyymmdd");
db.query('SELECT ID, topic, DATE_FORMAT(scheduled_on, "%d/%m/%Y") as "date", DATE_FORMAT(scheduled_on, "%Hh%i") as "heure", IF(nb_of_attended-nb_of_participants=0, true, false) as "maxAtteint" FROM session WHERE DATE_FORMAT(scheduled_on, "%Y%m%d") >= ?', [today], async (error, result) => {
if(error){
console.log(error);
}
if(error){ console.log(error); }
if (result.length == 0) {
res.redirect('');
}
@@ -303,25 +275,54 @@ app.post("/auth/check-session", (req, res) => {
})
}
else {
if (result[0].password === session_password) {
return res.render('login', {"session": session, "role": role, "topic": result[0].topic, "session_date": result[0].date})
}
else {
return res.render('login-session', {
"error": "Mot de passe incorrect : corriger votre saisie",
"select": listeSessions
let sessionDate = result[0].date;
let sessionTopic = result[0].topic;
bcrypt.compare(session_password, result[0].password)
.then(result => {
if (result) { return res.render('login', {"session": session, "role": role, "topic": sessionTopic, "session_date": sessionDate}) }
else {
return res.render('login-session', {
"error": "Mot de passe incorrect : corriger votre saisie",
"select": listeSessions
})
}
})
}
}
.catch(err => {
console.log(err);
})
}
})
})
// ******************************************* Création d'une nouvelle session *******************************************
app.post("/record-session", (req, res) => {
app.post("/record-session", async (req, res) => {
const { topic, attended, password, password_confirm, datetimepicker1Input } = req.body
console.log(datetimepicker1Input);
// On traite d'abord les motifs de rejet du formulaire.
if (isNaN(attended) || (!isNaN(attended) && attended < 0)) {
return res.render('create-session', {
error: "Le nombre de participants n'a pas une valeur correcte."
})
}
if(password !== password_confirm) {
return res.render('create-session', {
error: 'Vos mots de passe ne correspondent pas'
})
}
var newSessionId = functions.getUuid();
bcrypt.genSalt(saltRounds, (err, salt) => {
bcrypt.hash(password, salt, (err, hash) => {
db.query("INSERT INTO session (id, topic, password, nb_of_attended, scheduled_on) VALUES (?,?,?,?,STR_TO_DATE(?,'%d/%m/%Y %H:%i'))", [newSessionId, topic, hash, attended, datetimepicker1Input], (error, result) => {
if(error){ console.log(error); }
if(result && result.affectedRows > 0) {
res.redirect('/');
}
});
});
});
});