#!/usr/bin/env node /** * Mitarbeiter-2FA (E-Mail-Code) anzeigen, einschalten, abschalten. * * Usage (im Container, mit dem Server-Key): * docker exec -it -w /app webklar-kundenbereich-server node scripts/mitarbeiter-2fa.mjs --status * ... --enable |alle [--yes] * ... --disable (Notfall: bei einer Person kommt keine Mail an) */ import 'dotenv/config' import { createInterface } from 'node:readline/promises' import { disableStaffMfa, enableStaffMfa, listStaffMfaStatus } from '../server/services/staffMfaAdmin.js' const args = process.argv.slice(2) const flag = (name) => { const i = args.indexOf(name) return i === -1 ? null : args[i + 1] || '' } function printTable(rows) { for (const r of rows) { console.log( `${r.userId.padEnd(22)} ${r.name.padEnd(20)} ${r.email.padEnd(32)} E-Mail bestätigt: ${r.emailVerification ? 'ja ' : 'nein'} 2FA: ${r.mfa ? 'an' : 'aus'}` ) } } async function confirm(question) { if (args.includes('--yes')) return true const rl = createInterface({ input: process.stdin, output: process.stdout }) const answer = await rl.question(`${question} (Ja/Nein) `) rl.close() return /^j(a)?$/i.test(answer.trim()) } async function main() { const rows = await listStaffMfaStatus() if (args.includes('--status')) { printTable(rows) return } const enable = flag('--enable') if (enable !== null) { const targets = enable === 'alle' ? rows.filter((r) => !r.mfa) : rows.filter((r) => r.userId === enable) if (!targets.length) throw new Error(enable === 'alle' ? 'Alle Mitarbeiter haben 2FA schon an.' : `Kein Mitarbeiter mit userId ${enable}`) console.log('Der Code geht an diese Adressen – sie müssen Post empfangen:') printTable(targets) if (!(await confirm('2FA für diese Konten einschalten?'))) return console.log('Abgebrochen.') for (const r of targets) { await enableStaffMfa(r.userId) console.log(`2FA an: ${r.name} <${r.email}>`) } return } const disable = flag('--disable') if (disable) { const target = rows.find((r) => r.userId === disable) if (!target) throw new Error(`Kein Mitarbeiter mit userId ${disable}`) await disableStaffMfa(disable) console.log(`2FA aus: ${target.name} <${target.email}>`) return } console.log('Usage: --status | --enable |alle [--yes] | --disable ') } main().catch((err) => { console.error(err.message) process.exit(1) })