feat: add script to reset admin password and update package.json with new command

This commit is contained in:
Julien Froidefond
2025-10-17 08:23:36 +02:00
parent f636a7b112
commit b8af5e2468
2 changed files with 69 additions and 0 deletions

View File

@@ -8,6 +8,7 @@
"start": "next start",
"start:prod": "node scripts/init-db.mjs && pnpm start",
"init-db": "node scripts/init-db.mjs",
"reset-admin-password": "node scripts/reset-admin-password.mjs",
"lint": "next lint",
"typecheck": "tsc --noEmit",
"icons": "node scripts/generate-icons.js"

View File

@@ -0,0 +1,68 @@
#!/usr/bin/env node
/**
* Script de réinitialisation forcée du mot de passe admin
* Force la mise à jour du mot de passe du compte admin
*
* Usage: docker compose exec app pnpm reset-admin-password
*/
import { PrismaClient } from "@prisma/client";
import bcrypt from "bcryptjs";
const prisma = new PrismaClient();
const ADMIN_EMAIL = "julienfroidefond@gmail.com";
const ADMIN_PASSWORD = process.env.ADMIN_DEFAULT_PASSWORD || "Admin@2025";
async function resetAdminPassword() {
try {
console.log(`🔐 Resetting password for admin user: ${ADMIN_EMAIL}`);
console.log(`📡 MongoDB URI: ${process.env.MONGODB_URI || 'not set'}`);
// Vérifier si l'utilisateur existe
const existingAdmin = await prisma.user.findUnique({
where: { email: ADMIN_EMAIL },
});
if (!existingAdmin) {
console.error(`❌ Admin user ${ADMIN_EMAIL} does not exist!`);
console.log(`💡 Run 'npm run init-db' to create the admin user first.`);
process.exit(1);
}
// Hash le nouveau mot de passe
const hashedPassword = await bcrypt.hash(ADMIN_PASSWORD, 10);
// Mettre à jour le mot de passe
await prisma.user.update({
where: { email: ADMIN_EMAIL },
data: { password: hashedPassword },
});
console.log(`✅ Password reset successfully for ${ADMIN_EMAIL}`);
console.log(` New password: ${ADMIN_PASSWORD}`);
console.log(` Source: ${process.env.ADMIN_DEFAULT_PASSWORD ? 'ADMIN_DEFAULT_PASSWORD env var' : 'default value'}`);
console.log(` ⚠️ Please change the password after login!`);
} catch (error) {
console.error("❌ Error resetting admin password:", error);
throw error;
} finally {
await prisma.$disconnect();
}
}
async function main() {
console.log("🔧 Starting admin password reset...");
try {
await resetAdminPassword();
console.log("✅ Admin password reset completed");
process.exit(0);
} catch (error) {
console.error("❌ Admin password reset failed:", error);
process.exit(1);
}
}
main();