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)
This commit is contained in:
70
scripts/seed-admin.mjs
Normal file
70
scripts/seed-admin.mjs
Normal file
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* 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);
|
||||
});
|
||||
Reference in New Issue
Block a user