// scripts/create-user.js const { Pool } = require('pg'); const bcrypt = require('bcrypt'); const readline = require('readline'); require('dotenv').config(); const pool = new Pool({ host: process.env.DB_HOST, port: process.env.DB_PORT, database: process.env.DB_NAME, user: process.env.DB_USER, password: process.env.DB_PASSWORD, ssl: process.env.DB_SSL === 'true' ? { rejectUnauthorized: false } : false }); // Readline Interface für Benutzereingaben const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); // Hilfsfunktion für Benutzereingaben function askQuestion(question) { return new Promise((resolve) => { rl.question(question, (answer) => { resolve(answer.trim()); }); }); } async function createUser() { try { console.log('👤 Erstelle neuen Benutzer...\n'); // Verbindung testen await pool.query('SELECT NOW()'); console.log('✅ Datenbankverbindung erfolgreich\n'); // Benutzereingaben abfragen const username = await askQuestion('Benutzername eingeben: '); if (!username) { console.log('❌ Benutzername darf nicht leer sein!'); return; } const password = await askQuestion('Passwort eingeben: '); if (!password) { console.log('❌ Passwort darf nicht leer sein!'); return; } const confirmPassword = await askQuestion('Passwort bestätigen: '); if (password !== confirmPassword) { console.log('❌ Passwörter stimmen nicht überein!'); return; } console.log('\n🔄 Erstelle Benutzer...'); // Prüfen ob Benutzer bereits existiert const existingUser = await pool.query( 'SELECT id FROM adminusers WHERE username = $1', [username] ); if (existingUser.rows.length > 0) { console.log(`ℹ️ Benutzer "${username}" existiert bereits`); const update = await askQuestion('Passwort aktualisieren? (j/n): '); if (update.toLowerCase() === 'j' || update.toLowerCase() === 'ja' || update.toLowerCase() === 'y' || update.toLowerCase() === 'yes') { const passwordHash = await bcrypt.hash(password, 10); await pool.query( 'UPDATE adminusers SET password_hash = $1 WHERE username = $2', [passwordHash, username] ); console.log(`✅ Passwort für Benutzer "${username}" aktualisiert`); } else { console.log('❌ Vorgang abgebrochen'); return; } } else { // Neuen Benutzer erstellen const passwordHash = await bcrypt.hash(password, 10); await pool.query( 'INSERT INTO adminusers (username, password_hash) VALUES ($1, $2)', [username, passwordHash] ); console.log(`✅ Benutzer "${username}" erfolgreich erstellt`); } console.log('\n📝 Anmeldedaten:'); console.log(` Benutzername: ${username}`); console.log(` Passwort: ${password}`); } catch (error) { console.error('❌ Fehler beim Erstellen des Benutzers:', error); process.exit(1); } finally { rl.close(); await pool.end(); } } // Skript ausführen wenn direkt aufgerufen if (require.main === module) { createUser(); } module.exports = { createUser };