/** * Script DIRECT de reset de mot de passe * * POURQUOI CE SCRIPT ? * ----------------- * - Le compte `test@example.com` N'EXISTE PAS (vous avez raison !) * - L'envoi d'email nécessite une configuration SMTP complexe * - VOUS VOULEZ UNE SOLUTION DIRECTE, SANS PERDRE DE TEMPS * * CE QUE FAIT CE SCRIPT : * ------------------- * - Réinitialise DIRECTEMENT le mot de passe d'un compte existant * - Sans avoir besoin d'email * - Sans avoir besoin d'interface graphique * * COMMENT UTILISER : * --------------- * 1. Ouvrez un terminal dans le dossier keep-notes * 2. Exécutez: node scripts/reset-password.js * 3. Quand demandé, entrez l'email du compte à réinitialiser * 4. Entrez le nouveau mot de passe (2 fois pour confirmation) * 5. FINI ! Connectez-vous avec le nouveau mot de passe */ const readline = require('readline'); const bcrypt = require('bcryptjs'); const prisma = require('../lib/prisma').default; const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); console.log('╔══════════════════════════════════════════════════════════════════╗'); console.log('║ RESET DE MOT DE PASSE DIRECT ║'); console.log('║ ║'); console.log('║ ⚠️ ATTENTION : Utilisez seulement pour VOTRE propre compte ! ║'); console.log('║ ║'); console.log('╚══════════════════════════════════════════════════════════════════════╝'); console.log(''); rl.question('Entrez l\'EMAIL du compte à réinitialiser : ', async (email) => { if (!email || !email.includes('@')) { console.log('❌ Erreur : Email invalide !'); rl.close(); process.exit(1); } email = email.toLowerCase().trim(); console.log(`🔍 Recherche du compte : ${email}...`); try { const user = await prisma.user.findUnique({ where: { email: email } }); if (!user) { console.log(''); console.log('❌ ERREUR : AUCUN compte trouvé avec cet email !'); console.log(''); console.log('📋 COMPTES DISPONIBLES (si existants) :'); console.log('─────────────────────────────────────────'); // Afficher tous les utilisateurs de la base de données const allUsers = await prisma.user.findMany({ select: { email: true, name: true, role: true, createdAt: true }, orderBy: { createdAt: 'desc' } }); if (allUsers.length > 0) { console.log(''); allUsers.forEach((u, index) => { console.log(`${index + 1}. 📧 Email: ${u.email}`); console.log(` 👤 Nom: ${u.name || 'N/A'}`); console.log(` 🏷️ Rôle: ${u.role}`); console.log(` 📅 Créé: ${u.createdAt.toLocaleString('fr-FR')}`); console.log(''); }); } else { console.log(' (Aucun compte dans la base de données)'); } console.log('─────────────────────────────────────────'); console.log(''); rl.close(); process.exit(1); } console.log(`✅ Compte trouvé : ${user.email} (${user.name})`); console.log(''); rl.question('Entrez le NOUVEAU mot de passe (minimum 6 caractères) : ', async (newPassword) => { if (!newPassword || newPassword.length < 6) { console.log('❌ Erreur : Le mot de passe doit avoir au moins 6 caractères !'); rl.close(); process.exit(1); } rl.question('Confirmez le nouveau mot de passe : ', async (confirmPassword) => { if (newPassword !== confirmPassword) { console.log('❌ Erreur : Les mots de passe ne correspondent pas !'); rl.close(); process.exit(1); } console.log(''); console.log('🔄 Réinitialisation du mot de passe en cours...'); const hashedPassword = await bcrypt.hash(newPassword, 10); await prisma.user.update({ where: { id: user.id }, data: { password: hashedPassword, resetToken: null, resetTokenExpiry: null } }); console.log('✅ SUCCÈS ! Le mot de passe a été réinitialisé !'); console.log(''); console.log('═══════════════════════════════════════════════════════════════════════'); console.log('🎉 VOUS POUVEZ MAINTENANT VOUS CONNECTER !'); console.log('═════════════════════════════════════════════════════════════════════'); console.log(''); console.log('📱 URL de connexion : http://localhost:3000/login'); console.log('📧 Email :', email); console.log('🔑 Mot de passe :', newPassword); console.log(''); console.log('⏩ Copiez ces informations et connectez-vous !'); console.log(''); rl.close(); process.exit(0); }); }); } catch (error) { console.log(''); console.log('❌ ERREUR lors de la réinitialisation :'); console.error(error); rl.close(); process.exit(1); } });