/** * Script de création du compte administrateur local immuable. * Usage : node scripts/seed-admin.mjs */ import bcrypt from "bcryptjs"; import mysql from "mysql2/promise"; import dotenv from "dotenv"; import { fileURLToPath } from "url"; import { dirname, join } from "path"; const __dirname = dirname(fileURLToPath(import.meta.url)); dotenv.config({ path: join(__dirname, "../.env") }); const DATABASE_URL = process.env.DATABASE_URL; if (!DATABASE_URL) { console.error("❌ DATABASE_URL non définie"); process.exit(1); } const USERNAME = "adminServPodcast"; const PASSWORD = "Itinova69!"; const OPEN_ID = "local-adminServPodcast"; // openId fictif pour compte local async function main() { const connection = await mysql.createConnection(DATABASE_URL); try { // Vérifier si le compte existe déjà const [rows] = await connection.execute( "SELECT id, username, immutable FROM users WHERE username = ?", [USERNAME] ); if (rows.length > 0) { const existing = rows[0]; if (existing.immutable) { console.log(`✅ Le compte "${USERNAME}" existe déjà et est immuable. Aucune modification.`); return; } // Mettre à jour le hash si le compte existe mais n'est pas encore immuable const hash = await bcrypt.hash(PASSWORD, 12); await connection.execute( "UPDATE users SET passwordHash = ?, immutable = TRUE, role = 'admin', loginMethod = 'local' WHERE username = ?", [hash, USERNAME] ); console.log(`✅ Compte "${USERNAME}" mis à jour et marqué immuable.`); return; } // Créer le compte const hash = await bcrypt.hash(PASSWORD, 12); await connection.execute( `INSERT INTO users (openId, username, passwordHash, name, role, loginMethod, immutable, lastSignedIn, createdAt, updatedAt) VALUES (?, ?, ?, ?, 'admin', 'local', TRUE, NOW(), NOW(), NOW())`, [OPEN_ID, USERNAME, hash, "Administrateur Service Podcast"] ); console.log(`✅ Compte "${USERNAME}" créé avec succès.`); console.log(` - Rôle : admin`); console.log(` - Immuable : oui`); console.log(` - openId : ${OPEN_ID}`); } finally { await connection.end(); } } main().catch((err) => { console.error("❌ Erreur :", err.message); process.exit(1); });