206 lines
6.1 KiB
JavaScript
206 lines
6.1 KiB
JavaScript
const express = require('express');
|
|
const session = require('express-session');
|
|
const path = require('path');
|
|
const bcrypt = require('bcrypt');
|
|
const db = require('./config/db');
|
|
|
|
const app = express();
|
|
const PORT = 3000;
|
|
|
|
// --------------------
|
|
// Middleware
|
|
// --------------------
|
|
app.use(express.static('public'));
|
|
app.use('/img', express.static('img'));
|
|
app.use(express.urlencoded({ extended: true }));
|
|
app.use(express.json());
|
|
|
|
app.set('view engine', 'ejs');
|
|
app.set('views', path.join(__dirname, 'views'));
|
|
|
|
app.use(session({
|
|
secret: 'votre-secret',
|
|
resave: false,
|
|
saveUninitialized: false
|
|
}));
|
|
|
|
app.use((req, res, next) => {
|
|
res.locals.session = req.session;
|
|
res.locals.currentRoute = req.path;
|
|
next();
|
|
});
|
|
|
|
// --------------------
|
|
// Middleware admin
|
|
// --------------------
|
|
function requireAdmin(req, res, next) {
|
|
if (!req.session.utilisateur || req.session.utilisateur.statut !== 'administrateur') {
|
|
return res.redirect('/non-admin');
|
|
}
|
|
next();
|
|
}
|
|
|
|
// --------------------
|
|
// Importation des routes
|
|
// --------------------
|
|
const profilRouter = require('./routes/profil');
|
|
const inscriptionRouter = require('./routes/inscription');
|
|
const connexionRouter = require('./routes/connexion');
|
|
const objetsRoutes = require('./routes/api/objet');
|
|
const utilisateursRoutes = require('./routes/api/utilisateur');
|
|
const ressourceRoutes = require('./routes/api/ressource');
|
|
const complexeRoutes = require('./routes/complexe');
|
|
const adminRoutes = require('./routes/admin');
|
|
|
|
// --------------------
|
|
// Utilisation des routes
|
|
// --------------------
|
|
app.use('/profil', profilRouter);
|
|
app.use('/inscription', inscriptionRouter);
|
|
app.use('/connexion', connexionRouter);
|
|
app.use('/api/objets', objetsRoutes);
|
|
app.use('/api/utilisateurs', utilisateursRoutes);
|
|
app.use('/api/ressources', ressourceRoutes);
|
|
app.use('/complexe', complexeRoutes);
|
|
app.use('/admin', adminRoutes);
|
|
|
|
// --------------------
|
|
// Pages de vue
|
|
// --------------------
|
|
app.get('/', (req, res) => res.render('accueil'));
|
|
app.get('/objets', (req, res) => res.render('objets'));
|
|
app.get('/ressources', (req, res) => res.render('ressources'));
|
|
app.get('/description', (req, res) => res.render('description'));
|
|
app.get('/contact', (req, res) => res.render('contact'));
|
|
|
|
app.get('/membres', (req, res) => {
|
|
db.query('SELECT * FROM utilisateur', (err, membres) => {
|
|
if (err) return res.status(500).send('Erreur BDD');
|
|
res.render('membres', { membres });
|
|
});
|
|
});
|
|
|
|
app.get('/membres/:id', (req, res) => {
|
|
const id = req.params.id;
|
|
db.query('SELECT * FROM utilisateur WHERE id = ?', [id], (err, results) => {
|
|
if (err || results.length === 0) return res.status(404).send('Utilisateur non trouvé');
|
|
res.render('membre', { membre: results[0] });
|
|
});
|
|
});
|
|
|
|
app.get('/dashboard-complexe', (req, res) => {
|
|
if (!req.session.utilisateur || req.session.utilisateur.statut !== 'complexe') {
|
|
return res.send(`
|
|
<script>
|
|
alert("Tu n'es pas connecté en tant que complexe ;)");
|
|
window.location.href = '/connexion';
|
|
</script>
|
|
`);
|
|
}
|
|
|
|
db.query('SELECT * FROM objet', (err, objets) => {
|
|
if (err) return res.status(500).send("Erreur objets");
|
|
res.render('dashboard-complexe', { objets });
|
|
});
|
|
});
|
|
|
|
app.get('/dashboard-simple', (req, res) => {
|
|
if (!req.session.utilisateur || req.session.utilisateur.statut !== 'simple') {
|
|
return res.redirect('/non-admin');
|
|
}
|
|
res.redirect('/objets');
|
|
});
|
|
|
|
app.get('/non-admin', (req, res) => {
|
|
res.send(`
|
|
<script>
|
|
alert("Tu n'es pas connecté en tant qu'admin ;)");
|
|
window.location.href = '/connexion';
|
|
</script>
|
|
`);
|
|
});
|
|
|
|
// --------------------
|
|
// Inscription utilisateur
|
|
// --------------------
|
|
app.post('/admin/ajouter-utilisateur', async (req, res) => {
|
|
const {
|
|
nom, prenom, sexe, age, date_naissance,
|
|
identifiant, email, mot_de_passe, situation, statut
|
|
} = req.body;
|
|
|
|
try {
|
|
const checkSql = 'SELECT * FROM utilisateur WHERE email = ? OR identifiant = ?';
|
|
db.query(checkSql, [email, identifiant], async (err, results) => {
|
|
if (err) return res.status(500).send("Erreur serveur");
|
|
|
|
if (results.length > 0) {
|
|
return res.send(`
|
|
<script>
|
|
alert("⚠️ L'adresse e-mail ou l'identifiant est déjà utilisé !");
|
|
window.location.href = '/admin';
|
|
</script>
|
|
`);
|
|
}
|
|
|
|
const hashed = await bcrypt.hash(mot_de_passe, 10);
|
|
const insertSql = `
|
|
INSERT INTO utilisateur
|
|
(nom, prenom, sexe, age, date_naissance, identifiant, email, mot_de_passe, situation, statut, etat)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'en attente')
|
|
`;
|
|
db.query(insertSql, [
|
|
nom, prenom, sexe, age, date_naissance,
|
|
identifiant, email, hashed, situation, statut
|
|
], (err) => {
|
|
if (err) return res.status(500).send("Erreur lors de l'ajout de l'utilisateur");
|
|
res.redirect('/admin');
|
|
});
|
|
});
|
|
} catch (error) {
|
|
res.status(500).send('Erreur serveur');
|
|
}
|
|
});
|
|
|
|
// --------------------
|
|
// Ajout objet (admin)
|
|
// --------------------
|
|
app.post('/admin/ajouter-objet', (req, res) => {
|
|
const { denomination, adresse_ip, type, niveau, etat } = req.body;
|
|
const sql = `
|
|
INSERT INTO objet (denomination, adresse_ip, type, niveau, etat)
|
|
VALUES (?, ?, ?, ?, ?)`;
|
|
db.query(sql, [denomination, adresse_ip, type, niveau, etat], (err) => {
|
|
if (err) return res.status(500).send("Erreur lors de l'ajout de l'objet");
|
|
res.redirect('/admin');
|
|
});
|
|
});
|
|
|
|
// --------------------
|
|
// Envoi de message contact
|
|
// --------------------
|
|
app.post('/contact', (req, res) => {
|
|
const { nom, email, message } = req.body;
|
|
const sql = 'INSERT INTO contact (nom, email, message) VALUES (?, ?, ?)';
|
|
db.query(sql, [nom, email, message], (err) => {
|
|
if (err) return res.status(500).send("Erreur lors de l'envoi du message");
|
|
res.redirect('/');
|
|
});
|
|
});
|
|
|
|
// --------------------
|
|
// Déconnexion
|
|
// --------------------
|
|
app.get('/deconnexion', (req, res) => {
|
|
req.session.destroy(() => {
|
|
res.redirect('/');
|
|
});
|
|
});
|
|
|
|
// --------------------
|
|
// Lancement du serveur
|
|
// --------------------
|
|
app.listen(PORT, () => {
|
|
console.log(`✅ Serveur lancé sur http://localhost:${PORT}`);
|
|
});
|