94 lines
2.6 KiB
JavaScript
94 lines
2.6 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;
|
|
|
|
const EMAIL = "adminItinova"; // login (utilisé comme email)
|
|
const PASSWORD = "Itinova69!";
|
|
const NAME = "Gestionnaire SONUM (Itinova)";
|
|
const SONUM_ROLE = "gestionnaire";
|
|
const OPEN_ID = "local-admin-itinova"; // openId unique pour compte local
|
|
|
|
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);
|
|
|
|
// Vérifier si l'utilisateur existe déjà
|
|
const existing = await db
|
|
.select()
|
|
.from(users)
|
|
.where(eq(users.openId, OPEN_ID))
|
|
.limit(1);
|
|
|
|
let userId;
|
|
|
|
if (existing.length > 0) {
|
|
userId = existing[0].id;
|
|
console.log(`Utilisateur existant trouvé (id=${userId}), mise à jour du mot de passe...`);
|
|
// Mettre à jour le rôle au cas où
|
|
await db
|
|
.update(users)
|
|
.set({ sonumRole: SONUM_ROLE, name: NAME, email: EMAIL, updatedAt: new Date() })
|
|
.where(eq(users.id, userId));
|
|
} else {
|
|
// Créer l'utilisateur
|
|
const result = await db.insert(users).values({
|
|
openId: OPEN_ID,
|
|
name: NAME,
|
|
email: EMAIL,
|
|
loginMethod: "local",
|
|
role: "user",
|
|
sonumRole: SONUM_ROLE,
|
|
cguAccepted: true,
|
|
cguAcceptedAt: new Date(),
|
|
lastSignedIn: new Date(),
|
|
});
|
|
userId = Number(result[0].insertId);
|
|
console.log(`Utilisateur créé (id=${userId})`);
|
|
}
|
|
|
|
// Hasher le mot de passe
|
|
const passwordHash = await bcrypt.hash(PASSWORD, 12);
|
|
|
|
// Insérer ou mettre à jour les credentials locaux
|
|
const existingCreds = await db
|
|
.select()
|
|
.from(localCredentials)
|
|
.where(eq(localCredentials.userId, userId))
|
|
.limit(1);
|
|
|
|
if (existingCreds.length > 0) {
|
|
await db
|
|
.update(localCredentials)
|
|
.set({ passwordHash, updatedAt: new Date() })
|
|
.where(eq(localCredentials.userId, userId));
|
|
console.log("Mot de passe mis à jour.");
|
|
} else {
|
|
await db.insert(localCredentials).values({ userId, passwordHash });
|
|
console.log("Credentials locaux créés.");
|
|
}
|
|
|
|
console.log("\n✅ Compte générique gestionnaire SONUM prêt :");
|
|
console.log(` Login : ${EMAIL}`);
|
|
console.log(` Rôle : ${SONUM_ROLE}`);
|
|
console.log(` Nom : ${NAME}`);
|
|
|
|
await connection.end();
|
|
}
|
|
|
|
main().catch((err) => {
|
|
console.error("Erreur :", err);
|
|
process.exit(1);
|
|
});
|