import { Router } from 'express'; import { PrismaClient } from '@prisma/client'; import * as bcrypt from 'bcrypt'; import jwt from 'jsonwebtoken'; const router = Router(); const prisma = new PrismaClient(); const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key'; // Route de connexion router.post('/login', async (req, res) => { try { const { email, password } = req.body; // Vérifier les identifiants const admin = await prisma.admin.findUnique({ where: { email } }); if (!admin) { return res.status(401).json({ error: 'Identifiants invalides' }); } // Vérifier le mot de passe const validPassword = await bcrypt.compare(password, admin.password); if (!validPassword) { return res.status(401).json({ error: 'Identifiants invalides' }); } // Vérifier si le mot de passe doit être changé if (!admin.passwordChanged) { return res.status(403).json({ error: 'Changement de mot de passe requis', requiresPasswordChange: true }); } // Générer le token JWT const token = jwt.sign( { id: admin.id, email: admin.email, role: 'admin' }, JWT_SECRET, { expiresIn: '24h' } ); res.json({ token }); } catch (error) { console.error('Erreur lors de la connexion:', error); res.status(500).json({ error: 'Erreur serveur' }); } }); // Route de changement de mot de passe router.post('/change-password', async (req, res) => { try { const { email, currentPassword, newPassword } = req.body; // Vérifier l'administrateur const admin = await prisma.admin.findUnique({ where: { email } }); if (!admin) { return res.status(404).json({ error: 'Administrateur non trouvé' }); } // Vérifier l'ancien mot de passe const validPassword = await bcrypt.compare(currentPassword, admin.password); if (!validPassword) { return res.status(401).json({ error: 'Mot de passe actuel incorrect' }); } // Hasher le nouveau mot de passe const hashedPassword = await bcrypt.hash(newPassword, 10); // Mettre à jour le mot de passe await prisma.admin.update({ where: { id: admin.id }, data: { password: hashedPassword, passwordChanged: true } }); res.json({ message: 'Mot de passe changé avec succès' }); } catch (error) { console.error('Erreur lors du changement de mot de passe:', error); res.status(500).json({ error: 'Erreur serveur' }); } }); export default router;