#!/usr/bin/env node /** * Script de réinitialisation de l'utilisateur administrateur * Crée ou réinitialise l'utilisateur adminServFormation avec le mot de passe par défaut */ import { drizzle } from 'drizzle-orm/mysql2'; import { eq } from 'drizzle-orm'; import mysql from 'mysql2/promise'; import bcrypt from 'bcryptjs'; import { users } from './drizzle/schema.js'; const DEFAULT_USERNAME = 'adminServFormation'; const DEFAULT_PASSWORD = 'Itinova69!'; const DEFAULT_EMAIL = 'admin@formation.local'; async function resetAdmin() { console.log('╔════════════════════════════════════════════════════════════════╗'); console.log('║ Réinitialisation de l\'utilisateur administrateur ║'); console.log('╚════════════════════════════════════════════════════════════════╝'); console.log(''); // Vérifier que DATABASE_URL est définie if (!process.env.DATABASE_URL) { console.error('❌ [ERREUR] DATABASE_URL n\'est pas définie dans .env'); process.exit(1); } console.log('📋 Informations de l\'utilisateur:'); console.log(` Identifiant: ${DEFAULT_USERNAME}`); console.log(` Mot de passe: ${DEFAULT_PASSWORD}`); console.log(` Email: ${DEFAULT_EMAIL}`); console.log(` Rôle: admin`); console.log(''); try { // Créer la connexion à la base de données console.log('🔌 Connexion à la base de données...'); const connection = await mysql.createConnection(process.env.DATABASE_URL); const db = drizzle(connection); console.log('✅ Connexion établie'); console.log(''); // Hasher le mot de passe console.log('🔐 Hashage du mot de passe...'); const hashedPassword = await bcrypt.hash(DEFAULT_PASSWORD, 10); console.log('✅ Mot de passe hashé'); console.log(''); // Vérifier si l'utilisateur existe déjà console.log('🔍 Vérification de l\'existence de l\'utilisateur...'); const existingUsers = await db .select() .from(users) .where(eq(users.username, DEFAULT_USERNAME)) .limit(1); if (existingUsers.length > 0) { console.log('⚠️ L\'utilisateur existe déjà'); console.log('🔄 Mise à jour du mot de passe...'); await db .update(users) .set({ password: hashedPassword, email: DEFAULT_EMAIL, role: 'admin', isActive: true, updatedAt: new Date(), }) .where(eq(users.username, DEFAULT_USERNAME)); console.log('✅ Mot de passe réinitialisé avec succès'); } else { console.log('➕ L\'utilisateur n\'existe pas, création...'); await db.insert(users).values({ username: DEFAULT_USERNAME, password: hashedPassword, email: DEFAULT_EMAIL, name: 'Administrateur', role: 'admin', isActive: true, createdAt: new Date(), updatedAt: new Date(), }); console.log('✅ Utilisateur créé avec succès'); } console.log(''); console.log('╔════════════════════════════════════════════════════════════════╗'); console.log('║ Réinitialisation terminée avec succès! ║'); console.log('╚════════════════════════════════════════════════════════════════╝'); console.log(''); console.log('🔑 Vous pouvez maintenant vous connecter avec:'); console.log(` Identifiant: ${DEFAULT_USERNAME}`); console.log(` Mot de passe: ${DEFAULT_PASSWORD}`); console.log(''); console.log('⚠️ IMPORTANT: Changez le mot de passe après la première connexion'); console.log(''); await connection.end(); process.exit(0); } catch (error) { console.error(''); console.error('❌ [ERREUR] Une erreur est survenue:'); console.error(error.message); console.error(''); if (error.code === 'ER_NO_SUCH_TABLE') { console.error('💡 La table "users" n\'existe pas.'); console.error(' Exécutez: pnpm db:push'); } else if (error.code === 'ECONNREFUSED') { console.error('💡 Impossible de se connecter à la base de données.'); console.error(' Vérifiez que MySQL est démarré et que DATABASE_URL est correct.'); } console.error(''); process.exit(1); } } // Exécuter le script resetAdmin();