application.commands.auth_commands¶
src.application.commands.auth_commands
¶
Authentication commands (CQRS write operations).
Commands represent user intent to change system state. All commands are immutable (frozen=True) and use keyword-only arguments (kw_only=True).
Pattern: - Commands are data containers (no logic) - Handlers execute business logic - Commands don't return values (handlers return Result types) - Use Annotated types for validation (DRY principle)
Attributes¶
Classes¶
RegisterUser
dataclass
¶
Register new user account.
Creates user with email/password, generates email verification token. User cannot login until email is verified.
Attributes:
| Name | Type | Description |
|---|---|---|
email |
Email
|
User's email address (validated, normalized). |
password |
Password
|
User's password (validated strength, plain text, will be hashed). |
Example
command = RegisterUser( ... email="user@example.com", ... password="SecurePass123!", ... ) result = await handler.handle(command)
Source code in src/application/commands/auth_commands.py
AuthenticateUser
dataclass
¶
Authenticate user credentials.
Single responsibility: Verify user credentials only. Does NOT create sessions or generate tokens (CQRS separation).
Validates credentials, checks email verification, checks account lockout. Returns AuthenticatedUser on success (user_id, email, roles).
Attributes:
| Name | Type | Description |
|---|---|---|
email |
Email
|
User's email address (validated, normalized). |
password |
Password
|
User's password (plain text, validated strength). |
Example
command = AuthenticateUser( ... email="user@example.com", ... password="SecurePass123!", ... ) result = await handler.handle(command)
Returns Success(AuthenticatedUser) or Failure(error)¶
Source code in src/application/commands/auth_commands.py
VerifyEmail
dataclass
¶
Verify user's email address.
Validates verification token, marks user as verified. User can login after email verification.
Attributes:
| Name | Type | Description |
|---|---|---|
token |
VerificationToken
|
Email verification token (validated hex format). |
Example
command = VerifyEmail(token="abc123def456...") result = await handler.handle(command)
Source code in src/application/commands/auth_commands.py
RefreshAccessToken
dataclass
¶
Refresh access token using refresh token.
Validates refresh token, generates new access token + new refresh token. Implements token rotation (old refresh token deleted).
Attributes:
| Name | Type | Description |
|---|---|---|
refresh_token |
RefreshToken
|
Opaque refresh token (validated urlsafe base64 format). |
Example
command = RefreshAccessToken(refresh_token="dGhpcyBpcyB...") result = await handler.handle(command)
Source code in src/application/commands/auth_commands.py
RequestPasswordReset
dataclass
¶
Request password reset for user.
Generates password reset token, sends email with reset link. Always returns success (no user enumeration).
Attributes:
| Name | Type | Description |
|---|---|---|
email |
Email
|
User's email address (validated, normalized). |
ip_address |
str | None
|
Client IP address (for audit, abuse detection). |
user_agent |
str | None
|
Client user agent (for audit). |
Example
command = RequestPasswordReset( ... email="user@example.com", ... ip_address="192.168.1.1", ... user_agent="Mozilla/5.0...", ... ) result = await handler.handle(command)
Source code in src/application/commands/auth_commands.py
ConfirmPasswordReset
dataclass
¶
Confirm password reset with token and new password.
Validates reset token, updates user password, revokes all sessions. Forces user to login again after password change.
Attributes:
| Name | Type | Description |
|---|---|---|
token |
VerificationToken
|
Password reset token (validated hex format). |
new_password |
Password
|
New password (validated strength, plain text, will be hashed). |
Example
command = ConfirmPasswordReset( ... token="xyz789abc123...", ... new_password="NewSecurePass456!", ... ) result = await handler.handle(command)
Source code in src/application/commands/auth_commands.py
LogoutUser
dataclass
¶
Logout user and revoke refresh token.
Revokes refresh token associated with current session. JWT access token cannot be revoked (expires naturally in 15 minutes).
Attributes:
| Name | Type | Description |
|---|---|---|
user_id |
UUID
|
User's unique identifier (from JWT). |
refresh_token |
RefreshToken
|
Refresh token to revoke (validated urlsafe base64 format). |
Example
command = LogoutUser( ... user_id=UUID("123e4567-e89b-12d3-a456-426614174000"), ... refresh_token="dGhpcyBpcyB...", ... ) result = await handler.handle(command)