Files
sonum/scripts/set-local-password.mjs

74 lines
2.4 KiB
JavaScript

import { drizzle } from "drizzle-orm/mysql2";
import mysql from "mysql2/promise";
import bcrypt from "bcryptjs";
import { eq } from "drizzle-orm";
import * as schema from "../drizzle/schema.ts";
import dotenv from "dotenv";
dotenv.config();
const { users, localCredentials } = schema;
// ─── Paramètres ───────────────────────────────────────────────────────────────
const TARGET_EMAIL = "o.pareige@itinova.org";
const NEW_PASSWORD = "Itinova69!";
// ─────────────────────────────────────────────────────────────────────────────
async function main() {
if (!process.env.DATABASE_URL) {
console.error("DATABASE_URL manquant");
process.exit(1);
}
const connection = await mysql.createConnection(process.env.DATABASE_URL);
const db = drizzle(connection);
// Trouver l'utilisateur par email
const result = await db
.select()
.from(users)
.where(eq(users.email, TARGET_EMAIL))
.limit(1);
if (!result.length) {
console.error(`Aucun utilisateur trouvé avec l'email : ${TARGET_EMAIL}`);
await connection.end();
process.exit(1);
}
const user = result[0];
console.log(`Utilisateur trouvé : ${user.name} (id=${user.id}, rôle=${user.sonumRole})`);
// Hasher le mot de passe
const passwordHash = await bcrypt.hash(NEW_PASSWORD, 12);
// Insérer ou mettre à jour les credentials locaux
const existingCreds = await db
.select()
.from(localCredentials)
.where(eq(localCredentials.userId, user.id))
.limit(1);
if (existingCreds.length > 0) {
await db
.update(localCredentials)
.set({ passwordHash, updatedAt: new Date() })
.where(eq(localCredentials.userId, user.id));
console.log("Mot de passe mis à jour.");
} else {
await db.insert(localCredentials).values({ userId: user.id, passwordHash });
console.log("Credentials locaux créés.");
}
console.log(`\n✅ Connexion locale activée pour ${TARGET_EMAIL}`);
console.log(` Login : ${TARGET_EMAIL}`);
console.log(` Rôle : ${user.sonumRole}`);
await connection.end();
}
main().catch((err) => {
console.error("Erreur :", err);
process.exit(1);
});