// Legt einen Admin-Zugang für einen bestehenden Mitarbeiter an oder setzt ihn zurück. // // Ohne --password: Konto wird (neu) angelegt, das Passwort wird beim nächsten // Login vom Nutzer selbst vergeben (gleicher Mechanismus wie bei der Benutzerverwaltung). // Mit --password: setzt sofort ein Passwort (Notfall-Wiederherstellung, falls der // Admin sich ausgesperrt hat). // // Aufruf: // node scripts/reset-admin.js --employee-id 3 // node scripts/reset-admin.js --email admin@example.com --password neuesPasswort const bcrypt = require('bcryptjs'); const db = require('../db'); function readArg(name) { const idx = process.argv.indexOf(`--${name}`); return idx !== -1 ? process.argv[idx + 1] : undefined; } const employeeId = readArg('employee-id'); let email = readArg('email'); const password = readArg('password'); if (!employeeId && !email) { console.error( 'Nutzung: node scripts/reset-admin.js --employee-id [--password ]\n' + ' oder node scripts/reset-admin.js --email [--password ]' ); process.exit(1); } if (employeeId && !email) { const employee = db.prepare('SELECT email FROM employees WHERE id = ?').get(employeeId); if (!employee || !employee.email) { console.error(`Mitarbeiter ${employeeId} wurde nicht gefunden oder hat keine E-Mail hinterlegt.`); process.exit(1); } email = employee.email; } const passwordHash = password ? bcrypt.hashSync(password, 10) : null; db.prepare( `INSERT INTO users (employee_id, email, password_hash, role) VALUES (?, ?, ?, 'admin') ON CONFLICT (email) DO UPDATE SET role = 'admin', password_hash = excluded.password_hash` ).run(employeeId || null, email, passwordHash); console.log( password ? `Admin-Zugang für ${email} wurde mit dem angegebenen Passwort gesetzt.` : `Admin-Zugang für ${email} wurde angelegt/zurückgesetzt. Passwort wird beim nächsten Login vergeben.` );