Files
itinova-podcasts/scripts/seed-admin.mjs
manus-admin aab11c8308 Initial commit: itinova-podcasts v1
Stack: Node.js/Express + React/Vite + tRPC + MySQL (Drizzle ORM)
Features: Gestion de podcasts, établissements, mots-clés, upload audio S3
Migrations: 0000-0002 (users, etablissements, mots_cles, podcasts, podcast_mots_cles)
2026-04-12 18:34:56 -04:00

71 lines
2.3 KiB
JavaScript

/**
* 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);
});