Commit Graph

10 Commits

Author SHA1 Message Date
Chris Farhood ebbf46ae42 ci: test build on updated runners
build-image / test (push) Failing after 8s
build-image / build (push) Has been skipped
2026-07-07 22:15:02 -04:00
Chris Farhood ecf4df88d3 security: require verified email for admin + harden sessions
build-image / test (push) Successful in 49s
build-image / build (push) Successful in 19s
Admin (email allowlist) is now gated on a verified email and re-evaluated per
request instead of trusting a frozen cookie flag; session max_age cut to 8h.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 10:39:05 -04:00
Chris Farhood 67f631ac50 chore: add MIT LICENSE and .env.example
build-image / test (push) Failing after 12m43s
build-image / build (push) Has been skipped
2026-07-07 07:53:52 -04:00
Chris Farhood 674485f275 docs: add CLAUDE.md + README
build-image / test (push) Successful in 11s
build-image / build (push) Successful in 24s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 07:21:22 -04:00
Chris Farhood f13d70b45f portal: copy-URL button + step-by-step connector setup
build-image / test (push) Successful in 15s
build-image / build (push) Successful in 17s
2026-07-07 07:11:46 -04:00
Chris Farhood bb0eb84f75 portal: warn against a dot in the Claude connector name (breaks tool loading)
build-image / test (push) Successful in 8s
build-image / build (push) Successful in 20s
2026-07-07 07:01:22 -04:00
Chris Farhood c6c602fd20 portal: authenticate against Better Auth (public+PKCE); admin via email allowlist
build-image / test (push) Successful in 10s
build-image / build (push) Successful in 19s
Drops Authentik OIDC + the groups claim. Public PKCE client (Better Auth hashes
confidential secrets), scopes openid/email/profile, admin determined by ADMIN_EMAILS.
2026-07-05 22:14:43 -04:00
Chris Farhood 3908251f6e feat: base-path support (ROOT_PATH) for serving under /portal
build-image / test (push) Successful in 33s
build-image / build (push) Successful in 29s
Links, form actions, and redirects are prefixed with the gateway path prefix so
the portal can be served at intervalsicu.farhoodlabs.com/portal (gateway strips
/portal; FastAPI root_path generates correct URLs). Connector URL is configurable.
2026-07-04 21:25:12 -04:00
Chris Farhood 2e09009e11 feat(oidc): request configurable scopes incl. groups (admin gate)
build-image / test (push) Successful in 28s
build-image / build (push) Successful in 22s
2026-07-04 20:58:24 -04:00
Chris Farhood bb5e9d518c feat: Intervals.icu MCP portal (FastAPI + Authentik OIDC)
build-image / test (push) Successful in 37s
build-image / build (push) Successful in 25s
- OIDC login via Authentik; first login creates a disabled user (admin approval).
- Users set/replace their Intervals.icu athlete ID + API key; the key is validated
  against Intervals.icu and stored AES-256-GCM encrypted (shared key with the MCP
  server). Same users table (schema owned by the MCP server's migrations).
- Admin page (gated on the intervalsicu-mcp-admins group claim): list, approve,
  disable, delete users.
- 29 tests @ 93% (OIDC routes integration-only); Dockerfile asserts templates are
  packaged; .gitea CI test-gates the image build.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 20:51:46 -04:00