Files
SS/src/scripts/create-admin.js
T

64 lines
1.4 KiB
JavaScript

require('dotenv').config();
const bcrypt = require('bcryptjs');
const { closeDbPool, getDb } = require('../config/db');
const { logger } = require('../utils/logger');
function requireEnv(name) {
const value = process.env[name];
if (!value) {
throw new Error(`${name} is required`);
}
return value;
}
async function main() {
const username = requireEnv('ADMIN_USERNAME');
const email = requireEnv('ADMIN_EMAIL').toLowerCase();
const password = requireEnv('ADMIN_PASSWORD');
if (password.length < 8) {
throw new Error('ADMIN_PASSWORD must be at least 8 characters');
}
const db = getDb();
const existing = await db('users').where({ email }).orWhere({ username }).first();
const passwordHash = await bcrypt.hash(password, 12);
if (existing) {
await db('users').where({ id: existing.id }).update({
username,
email,
password_hash: passwordHash,
role: 'admin',
status: 'active'
});
logger.info({ id: existing.id, email }, 'Admin user updated');
return;
}
const [id] = await db('users').insert({
username,
email,
password_hash: passwordHash,
balance: '0.0000',
role: 'admin',
status: 'active'
});
logger.info({ id, email }, 'Admin user created');
}
main()
.catch((error) => {
logger.error({
message: error.message,
stack: error.stack
}, 'Failed to create admin user');
process.exitCode = 1;
})
.finally(() => closeDbPool());