Files
Ninjaserver/scripts/create-user.js
2025-09-23 14:13:24 +02:00

110 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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 };