Innebygd innlogging (AUTH_MODE=app) med neon-login og proxy-bypass

Valgfri app-auth ved siden av proxy-modus (default uendret). Signert
sesjons-cookie (scrypt-passord, HMAC, ingen avhengigheter), gating av API +
WebSocket, og en selvstendig neon-login (public/login.html) for uautentiserte.

Trusted bypass: en proxy-identitet (X-Remote-User / Basic Auth) regnes som
innlogget uten app-passord (TRUST_PROXY_HEADER, default på), så man kan
bootstrappe: logg inn via NPM Basic Auth → sett app-passord i konto-modalen →
skru av Basic Auth. Konto-UI for sett/endre passord + logg ut.

AUTH_MODE leses per createServer-instans (testbart). 34 integrasjonstester
(8 nye for app-auth), alle grønne. README/CLAUDE.md/setup-skript oppdatert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jon Vanvik 2026-06-15 14:27:13 +02:00
parent 7287f33e47
commit f6268440d9
9 changed files with 711 additions and 42 deletions

View file

@ -13,7 +13,9 @@
# Valgfrie miljøvariabler:
# PORT=3000 lytteport (default 3000)
# APP_DIR=/opt/netops hvor repoet havner ved kloning
# DISABLE_COOKIE_AUTH=1 skru av selvvalgt navn i UI (når proxyen gjør auth)
# AUTH_MODE=app innebygd innlogging (sesjons-cookie + passord)
# TRUST_PROXY_HEADER=0 slå av proxy-bypass i app-modus
# DISABLE_COOKIE_AUTH=1 proxy-modus: skru av selvvalgt navn i UI
#
# Kjør skriptet på nytt etter en `git pull` for å oppgradere (idempotent).
@ -88,6 +90,8 @@ ExecStart=$(command -v node) server.js
Environment=PORT=$PORT
Environment=HOST=0.0.0.0
Environment=DATA_DIR=/var/lib/$SERVICE
${AUTH_MODE:+Environment=AUTH_MODE=$AUTH_MODE}
${TRUST_PROXY_HEADER:+Environment=TRUST_PROXY_HEADER=$TRUST_PROXY_HEADER}
${DISABLE_COOKIE_AUTH:+Environment=DISABLE_COOKIE_AUTH=1}
Restart=on-failure