"""Mock Keycloak client for development mode. This module provides a mock Keycloak authentication client that bypasses real Keycloak server authentication in development mode. It generates token info based on dev-specific token formats. """ from app.infrastructure.auth.models import TokenInfo class MockKeycloakClient: """Mock Keycloak client for development and testing. Bypasses real Keycloak server authentication. Parses dev-specific token formats to generate TokenInfo with configurable roles. Attributes: _settings: Application settings. Example: >>> client = MockKeycloakClient() >>> token_info = await client.introspect_token("dev-token-admin") """ def __init__(self) -> None: """Initialize mock client.""" pass async def introspect_token(self, token: str) -> TokenInfo: """Introspect token in dev mode. If token starts with 'dev-token-', parses role from suffix. Otherwise returns inactive token. Args: token: Access token string. Returns: TokenInfo with dev user data if dev token, inactive otherwise. """ dev_users: dict[str, dict[str, str]] = { "dev-token-user": { "user_id": "dev-user", "username": "Dev User", "email": "dev.user@example.com", "role": "user", }, "dev-token-user2": { "user_id": "dev-user2", "username": "Test User", "email": "test.user@example.com", "role": "user", }, "dev-token-admin": { "user_id": "dev-admin", "username": "Dev Admin", "email": "dev.admin@example.com", "role": "admin", }, } if token == "dev-token-guest": return TokenInfo(active=False) if token in dev_users: user = dev_users[token] return TokenInfo( active=True, user_id=user["user_id"], username=user["username"], email=user["email"], roles=[user["role"]], ) return TokenInfo(active=False)