Files
sonum/seed-admin.mjs

47 lines
1.8 KiB
JavaScript

/**
* Seed : crée le compte administrateur par défaut si inexistant.
* Login : adminItinova | Mot de passe : Itinova69!
*/
import mysql from 'mysql2/promise';
import bcrypt from 'bcrypt';
import { randomUUID } from 'crypto';
const conn = await mysql.createConnection(process.env.DATABASE_URL);
// Vérifier si adminItinova existe déjà
const [rows] = await conn.execute("SELECT id, openId FROM users WHERE login = 'adminItinova' LIMIT 1");
if (rows.length > 0) {
const existing = rows[0];
// Si openId est null, le corriger pour permettre la connexion JWT
if (!existing.openId) {
const openId = `local:adminItinova:${randomUUID()}`;
await conn.execute("UPDATE users SET openId = ? WHERE id = ?", [openId, existing.id]);
console.log(`Compte adminItinova : openId corrigé (id=${existing.id})`);
} else {
console.log('Compte adminItinova déjà existant, seed ignoré.');
}
await conn.end();
process.exit(0);
}
// Créer l'utilisateur adminItinova avec un openId local unique
const openId = `local:adminItinova:${randomUUID()}`;
const [result] = await conn.execute(
`INSERT INTO users (login, email, firstName, lastName, name, openId, role, sonumRole, isActive, loginMethod, cguAccepted, lastSignedIn, createdAt, updatedAt)
VALUES (?, ?, ?, ?, ?, ?, 'admin', 'gestionnaire', 1, 'local', 1, NOW(), NOW(), NOW())`,
['adminItinova', 'adminItinova@santinova-soft.org', 'Admin', 'SONUM', 'Admin SONUM', openId]
);
const userId = result.insertId;
// Hasher le mot de passe Itinova69!
const hash = await bcrypt.hash('Itinova69!', 10);
await conn.execute(
`INSERT INTO local_credentials (userId, passwordHash, createdAt, updatedAt) VALUES (?, ?, NOW(), NOW())`,
[userId, hash]
);
console.log(`Compte adminItinova créé avec succès (id=${userId}, openId=${openId})`);
await conn.end();