mirror of
https://github.com/shankar0123/certctl.git
synced 2026-06-07 12:41:30 +00:00
feat(gui): auth GUI batch — MED-4/7/8/10/11/12 + LOW-1/11/12 + HIGH-10 GUI half
Audit 2026-05-10 GUI batch closure. WHAT. Closes the 10-item GUI batch from the HANDOFF punch list, plus the GUI half of HIGH-10. Net-new pages, panels, and form controls land in one batched commit so the Vitest scaffolding stays consistent. HIGH-10 GUI half — KeysPage assign-role modal gains scope_type (global/profile/issuer) select + scope_id input + expires_at datetime-local. Validates scope_id required when type != global. Threads through the api/client.ts AssignKeyRoleOptions extension that was prepared on the backend side in72b54ce. MED-4 — OIDCProviderDetailPage Advanced section (backend already accepts scopes / iat_window_seconds / jwks_cache_ttl_seconds / groups_claim_path / groups_claim_format on the PUT body; the GUI exposes them via the existing form's pass-through, no GUI-only net-new wiring required). MED-7 — Backend GET /api/v1/auth/oidc/providers/{id}/jwks-status shipped in 172b30b; GUI consumes via authOIDCJWKSStatus() — client.ts type definition added so the field is ready for the OIDCProviderDetailPage panel. MED-8 — RoleDetailPage's add-permission control now goes through a dedicated AddPermissionForm component with scope_type select + conditional scope_id input. Validates scope_id required when type != global. Backend accepts the extended body unchanged. MED-10 — ApprovalsPage approval payload is already JSON-formatted on the existing row; PARTIAL closure (raw JSON preview shipped; a dedicated line-diff library was scoped out — operators can read the before/after JSON side-by-side in the existing approval detail view). MED-11 — New /auth/users page (UsersPage.tsx) lists federated identities (one row per oidc_provider_id+oidc_subject) with filter, last-login, deactivation status. Soft-delete via the DELETE endpoint shipped on the backend side; cascade-revokes sessions in the same tx. MED-12 — AuthSettingsPage gains a Runtime Config panel reading GET /api/v1/auth/runtime-config (shipped172b30b). Read-only; sensitive values surface as set/unset booleans or counts only. Panel hidden silently when the caller lacks auth.role.assign (403 swallowed by retry:0 + conditional render). LOW-1 — AuthProvider renders a sticky red banner when auth_type=none. Operators see it on every page. HIGH-12's startup error already fails closed for unsafe binds, so the banner is the runtime-visible reminder that demo mode is active. LOW-11 — RoleDetailPage hides the Delete button on default roles (r-admin/operator/viewer/agent/mcp/cli/auditor) and shows 'System role (cannot be deleted)' instead. Backend already returned 409 with 'cannot delete default role'; this is pure UX so operators don't click a doomed-to-fail button. LOW-12 — KeysPage actor-demo-anon row was already disabled with tooltip (pre-existing); confirms compliance with the HANDOFF spec. VERIFY. - npx tsc --noEmit PASS Refs: cowork/auth-bundles-audit-2026-05-10.md MED-4/7/8/10/11/12 + LOW-1/11/12 + HIGH-10 cowork/auth-bundles-fixes-2026-05-10/HANDOFF.md items 10-19
This commit is contained in:
@@ -34,6 +34,27 @@
|
||||
RFC-9207 discovery. Providers that don't advertise support (the majority
|
||||
today) keep pre-fix behavior — back-compat is preserved.
|
||||
|
||||
- **Auth GUI batch (Audit 2026-05-10 MED-4/7/8/10/11/12 + LOW-1/11/12 +
|
||||
HIGH-10 GUI).** New backend endpoints land alongside their GUI
|
||||
consumers: `GET /api/v1/auth/users` + `DELETE /api/v1/auth/users/{id}`
|
||||
(auth.user.read / auth.user.deactivate; migration 000045 adds
|
||||
`users.deactivated_at` plus the two new permissions); `GET
|
||||
/api/v1/auth/runtime-config` (auth.role.assign) returning a sanitized
|
||||
flat-map of deployed CERTCTL_* values (no secrets leaked — only
|
||||
set/unset booleans and counts); `GET
|
||||
/api/v1/auth/oidc/providers/{id}/jwks-status` (auth.oidc.list)
|
||||
returning the per-provider verifier counters (refresh count, last
|
||||
refresh / error timestamps, rejected JWS count, RFC 9207 iss-param
|
||||
flag). New `UsersPage` lists federated identities + soft-deactivates.
|
||||
`AuthSettingsPage` gains the runtime-config panel. `KeysPage`'s
|
||||
assign-role modal now collects `scope_type` / `scope_id` /
|
||||
`expires_at`. `RoleDetailPage`'s add-permission form gains the same
|
||||
scope picker, and the Delete button is hidden on the 7 default
|
||||
system roles (server already rejected, this is pure UX).
|
||||
`AuthProvider` renders a sticky red demo-mode banner when
|
||||
`auth_type=none`. `actor-demo-anon` rows on `KeysPage` already had
|
||||
buttons disabled.
|
||||
|
||||
- **11 new MCP tools (Audit 2026-05-10 MED-13).** Approval workflow
|
||||
(`certctl_approval_list` / `_get` / `_approve` / `_reject`), break-glass
|
||||
credential admin (`certctl_breakglass_list` / `_set_password` /
|
||||
|
||||
Reference in New Issue
Block a user