Legge til argon2-cffi, pyotp, qrcode i requirements.txt Skrive migrasjon 012 (passord, 2FA, superadmin, org-invitasjoner) app/auth.py: sesjonsstadier, passord-hashing, TOTP-hjelpere app/routers/auth.py: passord-innlogging, 2FA-oppsett/verifisering app/email.py: 2FA-kode og invitasjons-maler app/routers/organizations.py: invitasjoner, medlemskapsstyring, superadmin-sti Frontend: login-form passord-modus + 2FA-skjermer Frontend: kontoinnstillinger + org-medlemsstyring-skjerm Ekte typesjekket frontend-build Scratch-verifisere hele auth-løpet grundig (backend) Deploy mot ekte teecup_db/containere + oppdatere .md-filer Backend og frontend er grundig scratch-verifisert — inkludert tre reelle bugs jeg fant og fikset underveis (en UUID-serialiseringsfeil i magic-link-innlogging, og to tilfeller av en uendelig 2FA-løkke der en nettopp bekreftet kode ble sjekket på nytt). Alle sikkerhetsvern testet eksplisitt: siste-eier-vern, blokkert selv-forfremmelse, admin kan ikke gi eierskap, superadmin fungerer/avvises riktig, tvungen 2FA for nye eiere, passord med spesialtegn/mellomrom, og bakoverkompatibilitet med eksisterende magic-link-flyt. Klar til utrulling mot ekte systemer: Migrasjon: 012_password_2fa_and_org_invitations.sql mot ekte teecup_db Redeploy: både teecup_api og teecup_frontend AskUserQuestion
23 lines
898 B
JavaScript
23 lines
898 B
JavaScript
// API-et proxyes server-side under samme opprinnelse (ingen CORS, cookien
|
|
// fungerer uendret) -- se ADR-009/015. TEECUP_API_ORIGIN peker mot en lokal
|
|
// backend i dev; i prod peker den mot teecup_api på det delte Docker-nettverket.
|
|
const API_ORIGIN = process.env.TEECUP_API_ORIGIN || "http://localhost:8000"
|
|
|
|
/** @type {import('next').NextConfig} */
|
|
const nextConfig = {
|
|
output: "standalone",
|
|
images: {
|
|
unoptimized: true,
|
|
},
|
|
async rewrites() {
|
|
return [
|
|
{ source: "/auth/:path*", destination: `${API_ORIGIN}/auth/:path*` },
|
|
{ source: "/orgs/:path*", destination: `${API_ORIGIN}/orgs/:path*` },
|
|
{ source: "/public/:path*", destination: `${API_ORIGIN}/public/:path*` },
|
|
{ source: "/superadmin/:path*", destination: `${API_ORIGIN}/superadmin/:path*` },
|
|
{ source: "/health", destination: `${API_ORIGIN}/health` },
|
|
]
|
|
},
|
|
}
|
|
|
|
export default nextConfig
|