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