/** * Legt ein Konto an – gedacht für das allererste Ausbilderkonto. * * npm run konto:anlegen -- --name "Max Mustermann" --email max@betrieb.de --rolle ausbilder * * Ohne --passwort wird eines erzeugt und ausgegeben. */ import crypto from 'node:crypto'; import { benutzerAnlegen, benutzerNachEmail, passwortSetzen } from '../src/lib/repos/benutzer'; import { rohVerbindung } from '../src/lib/db'; function argument(name: string): string | undefined { const index = process.argv.indexOf(`--${name}`); if (index === -1) return undefined; return process.argv[index + 1]; } function erzeugePasswort(): string { // Gut vorlesbar: keine leicht verwechselbaren Zeichen. const zeichen = 'abcdefghijkmnpqrstuvwxyz23456789'; const roh = crypto.randomBytes(16); return Array.from(roh, (b) => zeichen[b % zeichen.length]).join(''); } async function main() { rohVerbindung(); // Migrationen anwenden const name = argument('name'); const email = argument('email'); const rolle = (argument('rolle') ?? 'ausbilder') as 'ausbilder' | 'azubi'; const passwort = argument('passwort') ?? erzeugePasswort(); if (!name || !email) { console.error('Aufruf: npm run konto:anlegen -- --name "Vorname Nachname" --email adresse@betrieb.de [--rolle ausbilder|azubi] [--passwort ...]'); process.exit(1); } if (rolle !== 'ausbilder' && rolle !== 'azubi') { console.error('--rolle muss "ausbilder" oder "azubi" sein.'); process.exit(1); } const vorhanden = benutzerNachEmail(email); if (vorhanden) { await passwortSetzen(vorhanden.id, passwort); console.log(`Konto ${email} gab es schon – Passwort neu gesetzt.`); } else { await benutzerAnlegen({ name, email, passwort, rolle }); console.log(`Konto angelegt: ${name} <${email}> als ${rolle}.`); } console.log(`Passwort: ${passwort}`); console.log('Bitte notieren und nach der ersten Anmeldung ändern.'); } main().catch((fehler) => { console.error(fehler); process.exit(1); });