diff --git a/package.json b/package.json index 9bac198..ee2d44f 100644 --- a/package.json +++ b/package.json @@ -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" diff --git a/scripts/reset-admin-password.mjs b/scripts/reset-admin-password.mjs new file mode 100755 index 0000000..20e9f0b --- /dev/null +++ b/scripts/reset-admin-password.mjs @@ -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(); +