2.1 KiB
Console TOTP Admin UI Specification
Purpose
Admin interface for platform_admin users to view 2FA enrollment status across platform users and to reset a user's 2FA when required.
Requirements
Requirement: Platform Users List with 2FA Status
The platform users management area MUST display each user's 2FA enrollment status (enabled / disabled). This information MUST be fetched from the backend and MUST reflect the current two_factor_enabled value.
Scenario: User list shows 2FA status column
- GIVEN a
platform_adminvisits the platform users list - WHEN the list renders
- THEN each user row displays their 2FA enrollment state (e.g. "Enabled" or "Disabled")
Requirement: Admin 2FA Reset Action with Confirmation
For each user in the list, the UI MUST provide a "Reset 2FA" action. Activating the action MUST present a confirmation modal before calling the backend. The modal MUST identify the target user. Only on confirmation does the UI call POST /api/platform/users/:id/2fa-reset.
On a successful reset (HTTP 204), the UI MUST display a success toast notification and refresh the user list to reflect the updated 2FA state.
Scenario: Reset action opens confirmation modal
- GIVEN a
platform_adminis viewing the user list - WHEN they activate "Reset 2FA" for a user
- THEN a modal is displayed asking for confirmation
- AND the target user's name or email is visible in the modal
Scenario: Cancel closes modal without calling API
- GIVEN the confirmation modal is open
- WHEN the admin clicks "Cancel"
- THEN the modal closes
- AND
POST /api/platform/users/:id/2fa-resetis NOT called
Scenario: Confirm triggers reset and refreshes list
- GIVEN the confirmation modal is open
- WHEN the admin clicks "Confirm"
- THEN
POST /api/platform/users/:id/2fa-resetis called - AND on HTTP 204 a success toast is shown
- AND the user list refreshes and shows the target user's 2FA as "Disabled"
Scenario: API error shown to admin
- GIVEN the confirmation modal is open and the admin confirms
- WHEN the API returns a non-204 error
- THEN an error toast is displayed
- AND the modal closes without changing the list state