#!/usr/bin/env node // CLI: create-user [--admin] // Useful for adding additional users outside the web UI. const bcrypt = require('bcryptjs'); const { initDatabase, getDatabase, closeDatabase } = require('../database'); async function main() { const args = process.argv.slice(2); if (args.length < 2) { console.error('Usage: npm run create-user -- [--admin]'); process.exit(1); } const username = args[0]; const password = args[1]; const isAdmin = args.includes('--admin'); if (password.length < 8) { console.error('Passwort muss mindestens 8 Zeichen lang sein'); process.exit(1); } initDatabase(); // Give initDatabase a moment to run its serialized statements. await new Promise(r => setTimeout(r, 200)); const db = getDatabase(); const hash = await bcrypt.hash(password, 10); await new Promise((resolve, reject) => { db.run( 'INSERT INTO users (username, password_hash, display_name, is_admin) VALUES (?, ?, ?, ?)', [username, hash, username, isAdmin ? 1 : 0], function (err) { if (err) reject(err); else resolve(this.lastID); } ); }).then((id) => { console.log(`User '${username}' angelegt (id=${id}, admin=${isAdmin}).`); }).catch((err) => { if (/UNIQUE/.test(err.message)) { console.error(`User '${username}' existiert bereits.`); } else { console.error('Fehler:', err.message); } process.exitCode = 1; }); closeDatabase(); } main().catch(err => { console.error(err); process.exit(1); });