syncova-policies/scripts/seed-admin.js
Weapie 328f042307 Syncova Policies: Portal für DSGVO-Datenschutzerklärungen
Next.js 15 App Router mit öffentlicher Übersicht und geschütztem
Admin-Bereich zur Pflege von Datenschutzerklärungen nach Art. 12ff. DSGVO.

- Oberfläche auf Basis von shadcn/ui, Inter lokal eingebunden
- Prisma/SQLite, Auth.js mit Credentials-Provider und Rollen
- Massenimport der Merkblätter des Amtes Leezen aus PDF
- Docker-Image (standalone) und Gitea-Workflow zur Veröffentlichung

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 16:23:51 +02:00

54 lines
1.3 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Legt einmalig den ersten Admin-Zugang an – tut nichts, wenn bereits
* Benutzer existieren. Für einen bewussten Passwort-Reset:
*
* npm run reset-admin
*/
const { PrismaClient } = require("@prisma/client")
const bcrypt = require("bcryptjs")
const {
loadEnv,
generatePassword,
printCredentials,
} = require("./lib/admin-account")
loadEnv()
const prisma = new PrismaClient()
async function seedAdmin() {
const existingUsers = await prisma.user.count()
if (existingUsers > 0) {
console.log("Es existieren bereits Benutzer – Seeding übersprungen.")
console.log("Für einen Passwort-Reset: npm run reset-admin")
return
}
const email = (process.env.ADMIN_EMAIL || "admin@syncova.de").trim()
const name = process.env.ADMIN_NAME || "Administrator"
const password = process.env.ADMIN_PASSWORD || generatePassword()
await prisma.user.create({
data: {
email,
name,
password: await bcrypt.hash(password, 12),
role: "SUPER_ADMIN",
isActive: true,
},
})
printCredentials({ email, password, action: "angelegt" })
}
seedAdmin()
.catch((error) => {
console.error("Fehler beim Anlegen des Admin-Zugangs:", error)
process.exitCode = 1
})
.finally(async () => {
await prisma.$disconnect()
})