Finalisation de la pgae de création des sessions
This commit is contained in:
139
app.js
139
app.js
@@ -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('/');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user