ghostguild-org/app/pages
Jennie Robinson Faber de3bcc479a
Some checks failed
Test / playwright (push) Blocked by required conditions
Test / Notify on failure (push) Blocked by required conditions
Test / visual (push) Blocked by required conditions
Test / vitest (push) Has been cancelled
fix(auth): rewire OIDC logout/error flow through Nuxt pages
Migrate three render callbacks in oidc-provider (logoutSource,
postLogoutSuccessSource, renderError) from the baked guildPageShell
helper to Nuxt pages under app/pages/auth/, so they go through the
font module and design system instead of a shadow copy.

- Delete guildPageShell (~103 lines of shadow design system).
- Add /auth/logout-success, /auth/oidc-error, /auth/logout-confirm
  pages built on dashed-box + btn + main.css tokens.
- renderError now allow-lists error + error_description into query
  params and lets Vue default interpolation escape them, closing an
  XSS where OIDC error fields were concatenated into raw HTML.
- logoutSource extracts the xsrf from oidc-provider's stable form
  output, sets it as an httpOnly 2-minute cookie, and redirects to
  /auth/logout-confirm. The confirm page reads the cookie during SSR,
  persists the value to useState, and clears the cookie so it's
  strictly one-time use. Defensive fallback keeps the raw auto-submit
  form if oidc-provider ever changes its form format.
- Fix form actions emitting http:// in production at the root cause:
  oidc-provider extends Koa but calls super() with no args, so
  app.proxy defaults to false and ctx.protocol ignores
  X-Forwarded-Proto. Set _provider.proxy = true after construction;
  remove the bogus proxy:true config key (silently ignored) and the
  form.replace('http://', 'https://') symptom patch. Make the
  x-forwarded-proto override in the catchall conditional on
  production + missing header (was unconditional + dead code).
- Add site-wide .btn:focus-visible rule in main.css for WCAG 2.4.7.

Verified in browser: Brygada 1918 loads on all three pages, contrast
ratios pass AA in dark + light, XSS payload escapes to text nodes
only, Set-Cookie: Max-Age=0 enforces one-time xsrf use, no
horizontal overflow at 500px, no console errors.
2026-04-11 23:21:46 +01:00
..
about feat: reskin public pages to zine direction 2026-04-02 21:29:52 +01:00
admin feat(wiki): add batch tag remove mode to admin wiki page 2026-04-09 23:52:00 +01:00
auth fix(auth): rewire OIDC logout/error flow through Nuxt pages 2026-04-11 23:21:46 +01:00
events feat(onboarding): add tracking calls to event, ecology, and wiki pages 2026-04-09 22:46:41 +01:00
member Merge branch 'worktree-agent-a975576d' 2026-04-09 22:46:52 +01:00
members refactor(peer-support): clean up stale references (Phase 5) 2026-04-09 09:31:37 +01:00
series feat(layout): add PageShell, ColumnsLayout, PageSection primitives 2026-04-08 15:51:38 +01:00
about.vue refactor(about): migrate about page to PageShell + ColumnsLayout 2026-04-08 17:00:46 +01:00
accept-invite.vue feat: pre-registrant management and invitation system 2026-04-06 14:46:11 +01:00
coming-soon.vue Fix Go to Wiki and Sign out appearing side by side 2026-03-19 18:13:33 +00:00
connections.vue refactor(community): rename Community Connections → Community Ecology 2026-04-09 09:07:15 +01:00
ecology.vue feat(onboarding): add tracking calls to event, ecology, and wiki pages 2026-04-09 22:46:41 +01:00
index.vue merge: worktree-a11y-fixes into main 2026-04-05 22:05:00 +01:00
join.vue fix: use private helcimApiToken for all server-side Helcim API calls 2026-04-04 13:37:34 +01:00
login.vue Add login form to coming-soon page and allow admin routes through 2026-03-19 11:01:03 +00:00
verify.vue fix: use private helcimApiToken for all server-side Helcim API calls 2026-04-04 13:37:34 +01:00
welcome.vue feat(onboarding): redirect /welcome to /member/dashboard 2026-04-09 22:28:57 +01:00