- Unified localStorage key to 'theme-preference' across all components
- Fixed header.tsx using wrong localStorage key ('theme' instead of 'theme-preference')
- Added localStorage hybrid persistence for instant theme changes
- Removed router.refresh() which was causing stale data revert
- Replaced Blue theme with Sepia
- Consolidated auth() calls to prevent race conditions
- Updated UserSettingsData types to include all themes
146 lines
5.7 KiB
JavaScript
146 lines
5.7 KiB
JavaScript
/**
|
|
* 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);
|
|
}
|
|
});
|