Lilleman auf Larv lilleman
lilleman pushed to main at larvit/plainpages 2026-06-18 11:45:06 +02:00
caadaf5da3 Reviewer-run fixes (todo §4); re-mint try/catch degrades an Ory outage to anonymous (not 500), RESERVED_PLUGIN_IDS refuses a plugin folder that would shadow a host route
lilleman pushed to main at larvit/plainpages 2026-06-18 11:32:29 +02:00
b5af4ba6cd E2E for token timeout + refresh (todo §4); full-stack auth-refresh.spec.ts (real Ory stack): a lapsed session JWT is silently re-minted from the live Kratos session (roles re-read from Keto), and cleared once the session is revoked; ory/kratos/e2e.yml shortens the tokenizer ttl to 8s + adds JWT_CLOCK_SKEW_SEC config so re-mint fires at expiry; scope visual suite to visual.spec.ts
lilleman pushed to main at larvit/plainpages 2026-06-18 11:12:35 +02:00
4b2173cb84 Secure cookie flags + CSRF for our own POST forms (todo §4); SECURE_COOKIES toggle on session/CSRF cookies; csrf.ts signed double-submit token + body.ts form reader; logout is now a CSRF-guarded POST form
lilleman pushed to main at larvit/plainpages 2026-06-18 10:35:11 +02:00
dec55f85a6 Logout (todo §4); GET /logout clears plainpages_jwt + revokes the Kratos session (createLogoutFlow → redirect to Kratos logout URL → /login); wire shell Sign out link
lilleman pushed to main at larvit/plainpages 2026-06-18 10:25:08 +02:00
4f6b60463b Session re-mint on TTL expiry (todo §4); resolveSession flags a lapsed token, app.ts hot path re-mints via remintSession (roles re-read from Keto → fresh cookie) only when a live Kratos session backs it; a dead session clears the stale cookie
lilleman pushed to main at larvit/plainpages 2026-06-18 10:10:21 +02:00
228a206469 Auth guards (todo §4); guards.ts: requireSession/can/check + GuardError, app.ts maps GuardError → 303 /login or 403 (never 500)
lilleman pushed to main at larvit/plainpages 2026-06-18 10:01:41 +02:00
24eb6b1c68 JWKS fetch + cache + rotation (todo §4); cachingJwks: TTL cache + rotation-on-miss reload (throttled, last-good on error), createJwksProvider routes file/base64/http + primes at boot
lilleman pushed to main at larvit/plainpages 2026-06-18 09:53:42 +02:00
c8b56b85eb JWT session middleware (todo §4); authenticate(): verify the session cookie via cached JWKS (key by kid) → exp/nbf/iss/aud claims (clock skew) → ctx.user/roles; iss/aud opt-in; fail-closed
lilleman pushed to main at larvit/plainpages 2026-06-17 23:15:34 +02:00
38157605d0 Login completion (todo §4); /auth/complete: roles from Keto → metadata_public projection → tokenize → plainpages_jwt cookie; fix tokenizer projection metadata_admin→metadata_public (whoami strips admin metadata)
lilleman pushed to main at larvit/plainpages 2026-06-17 18:20:49 +02:00
26a7821611 Render SSO buttons per configured Kratos OIDC provider (todo §4); flow-view collects oidc nodes → auth-card submit buttons, server-side visibility, drop mockup #sso-toggle CSS
lilleman pushed to main at larvit/plainpages 2026-06-17 17:56:04 +02:00
0928f9dd39 Render Kratos self-service flows as themed pages (todo §4); buildFlowView + views/auth.ejs + login/registration/recovery/verification/settings routes
lilleman pushed to main at larvit/plainpages 2026-06-17 17:34:02 +02:00
2a64cfd409 Add Keto fetch client (todo §4); createKetoClient(): check / list / expand relations + write / delete tuples
lilleman pushed to main at larvit/plainpages 2026-06-17 17:22:05 +02:00
5e96678fda Add Kratos admin-API fetch client (todo §4); createKratosAdmin(): identity CRUD + surgical metadata_admin update (login role projection)
lilleman pushed to main at larvit/plainpages 2026-06-17 17:15:55 +02:00
898dc7f2cf Add Kratos public-API fetch client (todo §4); createKratosPublic(): self-service flow init/get/submit, whoami, session→JWT tokenize
lilleman pushed to main at larvit/plainpages 2026-06-17 17:07:40 +02:00
fcf042fa66 Unify §3 test overlaps (todo §3); fold the 5× image-pin checks into one compose.test.ts scan + same-version sidecar test, drop the duplicate committed-JWKS re-validation in config.test.ts
lilleman pushed to main at larvit/plainpages 2026-06-17 17:00:49 +02:00
360449e76b Tighten §3 comments (todo §3); drop stale 'next §3 item' forward-refs, condense compose/Ory/bootstrap headers
lilleman pushed to main at larvit/plainpages 2026-06-17 16:49:39 +02:00
e83cf4da88 Address project-wide review (todo §3); fix JWKS_URL default → tokenizer signing key + read-only web mount, cap bootstrap restart, --no-deps for unit commands
lilleman pushed to main at larvit/plainpages 2026-06-17 16:32:56 +02:00
1fc6b42156 Document the only manual prep (todo §3); README 'What you must supply' — production secrets + optional SSO creds, everything else auto-generated
lilleman pushed to main at larvit/plainpages 2026-06-17 16:22:51 +02:00
4d65665063 Bootstrap: print first-run login banner (URL + seeded creds + change-before-prod warning)
lilleman pushed to main at larvit/plainpages 2026-06-17 16:18:27 +02:00
a6900217cb One-command bootstrap (todo §3); idempotent first-boot seed: JWKS-if-absent, demo admin in Kratos, admin role in Keto