Initial local commit

This commit is contained in:
2025-09-03 11:07:29 +02:00
commit e6cf08893e
20 changed files with 11387 additions and 0 deletions

109
scripts/create-user.js Normal file
View File

@@ -0,0 +1,109 @@
// 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 };