- config.ts: resolve authorize/token/userinfo/end-session/jwks endpoints from
the issuer's OIDC discovery document (cached per session) instead of
hardcoding the production host; non-default issuers now resolve all
endpoints from their own discovery document, and discovery failures surface
a clear ConfigError with no silent fallback.
- auth/oidc.ts: all flows (buildAuthorizeUrl, handleCallback,
refreshAccessToken, logout) resolve endpoints via discovery; logout is now
async.
- AppRoutes.tsx: remove the dead response.status === 403 branch in probeApi
(apiFetch already throws ApiForbiddenError) and surface ConfigError as the
configuration error screen.
- api/client.ts: post-refresh retry maps only 401 to ApiUnauthorizedError and
preserves other statuses (e.g. 500) on the returned response.
Tests: add discovery resolution tests (config.test.ts), discovery-based
authorize URL test (oidc.test.ts), and retry-500 labeling test
(client.test.ts); adapt logout test to the async signature.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Maestro task 630c3472 (Authentik OIDC PKCE login and refusal handling), Feature 19 - Admin PWA.
Adds authorization-code + PKCE login against Authentik (public client, no secret): pkce.ts (S256), oidc.ts (authorize URL, state check, token exchange, sessionStorage store, refresh/logout), api/client.ts (Bearer attach; 401 -> login, 403 -> ApiForbiddenError), AppRoutes.tsx (minimal path routing for
/and/auth/callback, login/loading/config-error/explicit-refusal screens), and a committed admin/.env.example. Tests stub the provider (no real network).Evidence (developer):
npm run buildexit 0;npm test20 tests passed incl. the existing four-tab suite.Independent Claude Sonnet 5 review completed for this exact commit.
Independent Claude Sonnet 5 review completed for this exact commit.