feat: enhance reset-admin-password script to support email and password arguments for improved flexibility

This commit is contained in:
Julien Froidefond
2025-11-14 16:54:34 +01:00
parent 8ccd13465f
commit 24783a0c45

View File

@@ -3,7 +3,10 @@
* Script de réinitialisation forcée du mot de passe admin * Script de réinitialisation forcée du mot de passe admin
* Force la mise à jour du mot de passe du compte admin * Force la mise à jour du mot de passe du compte admin
* *
* Usage: docker compose exec app pnpm reset-admin-password * Usage:
* pnpm reset-admin-password [nouveau-mot-de-passe]
* pnpm reset-admin-password [email] [nouveau-mot-de-passe]
* docker compose exec app pnpm reset-admin-password [nouveau-mot-de-passe]
*/ */
import { PrismaClient } from "@prisma/client"; import { PrismaClient } from "@prisma/client";
@@ -11,37 +14,52 @@ import bcrypt from "bcryptjs";
const prisma = new PrismaClient(); const prisma = new PrismaClient();
const ADMIN_EMAIL = "julienfroidefond@gmail.com"; const DEFAULT_ADMIN_EMAIL = "julienfroidefond@gmail.com";
const ADMIN_PASSWORD = process.env.ADMIN_DEFAULT_PASSWORD || "Admin@2025";
// Récupérer les arguments de la ligne de commande
const args = process.argv.slice(2);
let adminEmail = DEFAULT_ADMIN_EMAIL;
let adminPassword = process.env.ADMIN_DEFAULT_PASSWORD || "Admin@2025";
if (args.length === 1) {
// Un seul argument = nouveau mot de passe pour l'email par défaut
adminPassword = args[0];
} else if (args.length === 2) {
// Deux arguments = email et nouveau mot de passe
adminEmail = args[0];
adminPassword = args[1];
} else if (args.length > 2) {
console.error("❌ Usage: pnpm reset-admin-password [email] [nouveau-mot-de-passe]");
console.error(" Si l'email est omis, utilise l'email par défaut");
process.exit(1);
}
async function resetAdminPassword() { async function resetAdminPassword() {
try { try {
console.log(`🔐 Resetting password for admin user: ${ADMIN_EMAIL}`); console.log(`🔐 Resetting password for user: ${adminEmail}`);
console.log(`📡 MongoDB URI: ${process.env.MONGODB_URI || 'not set'}`);
// Vérifier si l'utilisateur existe // Vérifier si l'utilisateur existe
const existingAdmin = await prisma.user.findUnique({ const existingAdmin = await prisma.user.findUnique({
where: { email: ADMIN_EMAIL }, where: { email: adminEmail },
}); });
if (!existingAdmin) { if (!existingAdmin) {
console.error(`Admin user ${ADMIN_EMAIL} does not exist!`); console.error(`User ${adminEmail} does not exist!`);
console.log(`💡 Run 'npm run init-db' to create the admin user first.`); console.log(`💡 Run 'npm run init-db' to create the admin user first.`);
process.exit(1); process.exit(1);
} }
// Hash le nouveau mot de passe // Hash le nouveau mot de passe
const hashedPassword = await bcrypt.hash(ADMIN_PASSWORD, 10); const hashedPassword = await bcrypt.hash(adminPassword, 10);
// Mettre à jour le mot de passe // Mettre à jour le mot de passe
await prisma.user.update({ await prisma.user.update({
where: { email: ADMIN_EMAIL }, where: { email: adminEmail },
data: { password: hashedPassword }, data: { password: hashedPassword },
}); });
console.log(`✅ Password reset successfully for ${ADMIN_EMAIL}`); console.log(`✅ Password reset successfully for ${adminEmail}`);
console.log(` New password: ${ADMIN_PASSWORD}`); console.log(` New password: ${adminPassword}`);
console.log(` Source: ${process.env.ADMIN_DEFAULT_PASSWORD ? 'ADMIN_DEFAULT_PASSWORD env var' : 'default value'}`);
console.log(` ⚠️ Please change the password after login!`); console.log(` ⚠️ Please change the password after login!`);
} catch (error) { } catch (error) {
console.error("❌ Error resetting admin password:", error); console.error("❌ Error resetting admin password:", error);