86 lines
2.5 KiB
JavaScript
Executable File
86 lines
2.5 KiB
JavaScript
Executable File
#!/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:
|
|
* 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 bcrypt from "bcryptjs";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
const DEFAULT_ADMIN_EMAIL = "julienfroidefond@gmail.com";
|
|
|
|
// 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() {
|
|
try {
|
|
console.log(`🔐 Resetting password for user: ${adminEmail}`);
|
|
|
|
// Vérifier si l'utilisateur existe
|
|
const existingAdmin = await prisma.user.findUnique({
|
|
where: { email: adminEmail },
|
|
});
|
|
|
|
if (!existingAdmin) {
|
|
console.error(`❌ User ${adminEmail} 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(adminPassword, 10);
|
|
|
|
// Mettre à jour le mot de passe
|
|
await prisma.user.update({
|
|
where: { email: adminEmail },
|
|
data: { password: hashedPassword },
|
|
});
|
|
|
|
console.log(`✅ Password reset successfully for ${adminEmail}`);
|
|
console.log(` New password: ${adminPassword}`);
|
|
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();
|