/** * Legt den Admin-Zugang neu an oder setzt sein Passwort zurück. * * npm run reset-admin * npm run reset-admin -- --email admin@syncova.de --remove admin@admin.de * * E-Mail/Name/Passwort stammen aus .env (ADMIN_EMAIL, ADMIN_NAME, ADMIN_PASSWORD) * und können per CLI-Flag überschrieben werden. Ist kein Passwort gesetzt, * wird ein Zufallspasswort erzeugt und einmalig ausgegeben. */ const { PrismaClient } = require("@prisma/client") const bcrypt = require("bcryptjs") const { loadEnv, generatePassword, printCredentials, } = require("./lib/admin-account") loadEnv() const prisma = new PrismaClient() function arg(name) { const index = process.argv.indexOf(`--${name}`) return index !== -1 ? process.argv[index + 1] : undefined } async function resetAdmin() { const email = (arg("email") || process.env.ADMIN_EMAIL || "admin@syncova.de").trim() const name = arg("name") || process.env.ADMIN_NAME || "Administrator" const password = arg("password") || process.env.ADMIN_PASSWORD || generatePassword() const remove = arg("remove") const hashedPassword = await bcrypt.hash(password, 12) const existing = await prisma.user.findUnique({ where: { email } }) await prisma.user.upsert({ where: { email }, update: { name, password: hashedPassword, role: "SUPER_ADMIN", isActive: true, }, create: { email, name, password: hashedPassword, role: "SUPER_ADMIN", isActive: true, }, }) printCredentials({ email, password, action: existing ? "zurückgesetzt" : "angelegt", }) if (remove && remove !== email) { const deleted = await prisma.user.deleteMany({ where: { email: remove } }) console.log( deleted.count > 0 ? ` Alter Zugang ${remove} wurde gelöscht.\n` : ` Hinweis: ${remove} war nicht (mehr) vorhanden.\n` ) } } resetAdmin() .catch((error) => { console.error("Fehler beim Zurücksetzen des Admin-Zugangs:", error) process.exitCode = 1 }) .finally(async () => { await prisma.$disconnect() })