Files
formation-manager-itinova/reset-admin.js

127 lines
4.7 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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();