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(` `); } 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(` `); }); // -------------------- // 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(` `); } 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}`); });