Kern der Benutzerverwaltung. Passwoerter: - scrypt aus der Node-Standardbibliothek (N=32768, r=8, p=1), speicherhart und ohne zusaetzliches natives Modul - Format scrypt$N$r$p$salt$hash, damit sich die Parameter spaeter anheben lassen - fakeVerifyDelay verbrennt bei unbekanntem Benutzernamen dieselbe Rechenzeit, sonst liesse sich an der Antwortzeit ablesen, welche Konten existieren Passkeys ueber SimpleWebAuthn 13: - Anmeldung ohne Benutzernamen ueber auffindbare Credentials - Challenges liegen in der Datenbank und werden beim Einloesen geloescht, koennen also nicht erneut eingespielt werden - rpID und Origin kommen aus APP_URL Sitzungen: - Zufallstoken im HttpOnly-Cookie, in der Datenbank nur dessen Hash - Abmelden und Sperren wirken sofort, weil bei jeder Anfrage nachgeschlagen wird - anders als bei einem selbsttragenden Token Middleware: CSRF-Pruefung ueber Sec-Fetch-Site bzw. Origin, Sicherheitskopfzeilen inklusive CSP mit Per-Request-Nonce und strict-dynamic, dazu eine grobe Zugangsschranke. Letztere ist ausdruecklich keine Sicherheitsgrenze - im Edge-Runtime gibt es keine Datenbank. Verbindlich entscheiden requireUserPage und requireUserApi, serverseitig, in jeder Seite und jedem Endpunkt. config.ts liest APP_NAME, APP_TAGLINE und APP_URL zur Laufzeit statt ueber NEXT_PUBLIC_-Variablen. Die waeren beim Build fest ins Bundle geschrieben; so laesst sich dasselbe Docker-Image ohne Neubau umbenennen und unter einer anderen Adresse betreiben. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
55 lines
1.6 KiB
JSON
55 lines
1.6 KiB
JSON
{
|
||
"name": "nebula",
|
||
"version": "0.1.0",
|
||
"private": true,
|
||
"description": "Nebula – Dashboard fuer Vibe-Coding Projekte mit Git-Anbindung (GitHub, GitLab, Gitea)",
|
||
"scripts": {
|
||
"dev": "next dev",
|
||
"build": "prisma generate && next build",
|
||
"start": "next start",
|
||
"lint": "next lint",
|
||
"typecheck": "tsc --noEmit",
|
||
"db:generate": "prisma generate",
|
||
"db:migrate": "prisma migrate deploy",
|
||
"db:migrate:dev": "prisma migrate dev",
|
||
"db:push": "prisma db push",
|
||
"db:studio": "prisma studio",
|
||
"db:seed": "prisma db seed",
|
||
"db:reset": "prisma migrate reset",
|
||
"docker:db": "docker compose up -d db",
|
||
"docker:db:down": "docker compose stop db",
|
||
"docker:up": "docker compose --profile full up -d --build",
|
||
"docker:down": "docker compose --profile full down",
|
||
"docker:logs": "docker compose --profile full logs -f app",
|
||
"docker:tools": "docker compose --profile tools up -d",
|
||
"setup": "node scripts/setup.mjs",
|
||
"postinstall": "prisma generate"
|
||
},
|
||
"prisma": {
|
||
"seed": "tsx prisma/seed.ts"
|
||
},
|
||
"dependencies": {
|
||
"@prisma/client": "^6.8.2",
|
||
"@simplewebauthn/browser": "^13.3.0",
|
||
"@simplewebauthn/server": "^13.3.2",
|
||
"lucide-react": "^0.511.0",
|
||
"next": "^15.3.3",
|
||
"react": "^19.1.0",
|
||
"react-dom": "^19.1.0",
|
||
"zod": "^3.25.28"
|
||
},
|
||
"devDependencies": {
|
||
"@tailwindcss/postcss": "^4.1.7",
|
||
"@types/node": "^22.15.21",
|
||
"@types/react": "^19.1.5",
|
||
"@types/react-dom": "^19.1.5",
|
||
"prisma": "^6.8.2",
|
||
"tailwindcss": "^4.1.7",
|
||
"tsx": "^4.19.4",
|
||
"typescript": "^5.8.3"
|
||
},
|
||
"engines": {
|
||
"node": ">=20.11"
|
||
}
|
||
}
|