Skip to content

feat: mount gakudan_liveboard dashboard behind OIDC auth - #11

Merged
Taure merged 2 commits into
mainfrom
feat/liveboard-dashboard
May 27, 2026
Merged

feat: mount gakudan_liveboard dashboard behind OIDC auth#11
Taure merged 2 commits into
mainfrom
feat/liveboard-dashboard

Conversation

@Taure

@Taure Taure commented May 27, 2026

Copy link
Copy Markdown
Owner

Embeds the gakudan_liveboard live console in triagebot, gated by Google OIDC login + an email-domain allowlist so the dashboard is not public ("not everyone can log in").

What's in it

  • bump gakudan v0.1.3 → v0.1.30; add gakudan_liveboard, datastar, telemetry, nova_auth_oidc deps + app entries
  • triagebot_oidc_confignova_auth_oidc provider config from env (TRIAGEBOT_OIDC_CLIENT_ID/SECRET, TRIAGEBOT_OIDC_ISSUER, TRIAGEBOT_BASE_URL)
  • triagebot_dashboard_auth — route security: no session → 302 login, email domain not in TRIAGEBOT_DASHBOARD_ALLOWED_DOMAINS → 403, else allow (empty allowlist = any authenticated user)
  • triagebot_auth_controller — adapts binary-keyed route bindings to the atom provider key nova_auth_oidc_controller expects
  • triagebot_router — public /auth/:provider/{login,callback} + self-hosted /assets (served from gakudan_liveboard's priv), protected dashboard route group
  • triagebot_app:startensure_providers only when OIDC creds are set, else logs that login is inert
  • relx exclude_modules to resolve the nova_auth / nova_auth_oidc duplicate-module collision

Verified end-to-end (running release)

unauth / → 302 /auth/google/login · /auth/google/login → 302 to accounts.google.com with PKCE · authed run index 200, run detail 200, live SSE transcript streaming · self-hosted assets 200 (GDPR).

Tests

triagebot_dashboard_auth_SUITE (10 cases: auth decision, allowlist, binding adapter, OIDC config). Full suite: 30 passing. fmt/xref clean.

Run it

Set OIDC env (TRIAGEBOT_OIDC_CLIENT_ID/SECRET, TRIAGEBOT_BASE_URL) + TRIAGEBOT_DASHBOARD_ALLOWED_DOMAINS; Google redirect URI = <base>/auth/google/callback. Without OIDC creds the board still mounts but login is inert.

Two upstream issues worked around (flagged for novaframework/*)

  1. nova_auth still ships the pre-extraction nova_auth_oidc/_jwt stub modules → collide with the dedicated nova_auth_oidc app (worked around via relx exclude_modules).
  2. nova_auth_oidc_controller matches an atom provider binding, but Nova keys bindings as binaries → 500 (worked around via triagebot_auth_controller).

Follow-ups

  • merge gakudan_liveboard design/conductor-console → main + tag, then pin a tag here instead of the branch
  • the two upstream nova_auth_oidc fixes

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown

🔴 Code Coverage — 23%

59 of 257 lines covered.


✅ ELP Lint

No diagnostics.

Embed the gakudan_liveboard live console in triagebot, gated by Google
OIDC login plus an email-domain allowlist so the dashboard is not public.

- bump gakudan v0.1.3 -> v0.1.30; add gakudan_liveboard, datastar,
  telemetry and nova_auth_oidc deps and app entries
- triagebot_oidc_config: nova_auth_oidc provider config from env
- triagebot_dashboard_auth: session + domain-allowlist route security
  (no session -> 302 login, disallowed domain -> 403)
- triagebot_auth_controller: adapt binary-keyed bindings to the atom
  provider key nova_auth_oidc_controller expects
- router: public /auth login/callback + self-hosted assets, protected
  dashboard route group
- pin nova_auth to a fork that drops the nova_auth_oidc/_jwt modules it
  still ships post-extraction (they collide with the dedicated app and
  break relx + dialyzer)
- tests for the auth decision, binding adapter and OIDC config
@Taure
Taure force-pushed the feat/liveboard-dashboard branch from e15d0b5 to 963124b Compare May 27, 2026 08:07
Replace every moving branch pin with a tag or commit SHA so the release
is reproducible and no dependency can shift under us:

- gakudan_liveboard -> tag v0.1.0 (just released)
- nova_auth_oidc -> tag v0.1.0
- nova -> SHA (Nova is pre-release; jsonlogger fork)
- datastar -> SHA (pre-release)
- nova_auth -> fork SHA (drops the extracted OIDC modules;
  upstream fix tracked in novaframework/nova_auth#11)
@Taure
Taure merged commit d8e3bbd into main May 27, 2026
16 checks passed
@Taure
Taure deleted the feat/liveboard-dashboard branch May 27, 2026 18:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant