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)
71 lines
2.3 KiB
JavaScript
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);
|
|
});
|