Files

3.7 KiB

ADDED Requirements

Requirement: Account login is the primary Console authentication flow

The Console SHALL use username/password login and a server-managed user session as its primary authentication flow, while retaining the existing tab-scoped bearer-token flow behind an explicit compatibility action.

Scenario: Operator opens the Console without authentication

  • WHEN /v1/auth/me reports no valid user session and no compatibility bearer token is active
  • THEN the Console displays the username/password login form as the primary action and offers a secondary “Use API token” action

Scenario: Login succeeds

  • WHEN an operator submits valid account credentials
  • THEN the Console enters session mode, displays the authenticated user's identity, and loads only views allowed by the returned effective scopes

Scenario: Login fails

  • WHEN the login endpoint rejects credentials or throttles the attempt
  • THEN the Console shows the generic authentication failure without revealing whether the username exists or persisting the password

Scenario: Operator chooses token compatibility

  • WHEN an operator explicitly selects “Use API token” and enters a bearer token
  • THEN the Console retains that token only in tab-scoped session storage and uses the existing bearer request behavior

Requirement: Console manages authenticated session lifecycle

The Console SHALL send cookies on user-session requests, attach session CSRF proof to unsafe requests, provide logout and password-change controls, and distinguish authentication loss from insufficient authorization.

Scenario: User logs out

  • WHEN a logged-in user activates logout
  • THEN the Console submits CSRF-protected logout, clears local authentication state, and returns to the login screen

Scenario: Session expires

  • WHEN a session-authenticated request returns 401
  • THEN the Console clears session UI state and returns to login with a session-expired message

Scenario: User lacks a required scope

  • WHEN an otherwise valid session-authenticated request returns 403
  • THEN the Console preserves the session and shows an authorization error for that operation

Scenario: User must change a temporary password

  • WHEN the current-user response sets must_change_password
  • THEN the Console restricts navigation to password change and logout until password change succeeds

Requirement: Administrators manage users from the Console

The Console SHALL expose a user-management view only to principals whose effective scopes include users:admin, with controls to list/create users, change role or enabled state, reset passwords, and revoke sessions.

Scenario: Administrator opens user management

  • WHEN an authenticated administrator opens the Users view
  • THEN the Console displays non-secret user records and the supported lifecycle controls without exposing password or session credential material

Scenario: Administrator creates an account

  • WHEN an administrator submits valid user details and an initial password
  • THEN the Console creates the account, clears password fields immediately, and shows that the new user must change the initial password

Scenario: Non-admin loads the Console

  • WHEN the current principal lacks users:admin
  • THEN the Console does not render the Users navigation or management controls, while backend authorization remains authoritative

Scenario: User-management mutation fails

  • WHEN a create, update, reset, or revoke request returns validation, conflict, or authorization failure
  • THEN the Console preserves non-secret form state as appropriate, clears all password fields, and displays the API error without retrying the mutation automatically