"""Auth0 integration test utilities.""" from dataclasses import dataclass import requests from secrets_manager.python_ext import PythonSecretsManager QA_ENVIRONMENT = "qa" APPLICATION = "ows-store-test" READONLY_USER = "ows-abacus-readonly-tester@theorchard.io" READONLY_USER_UNAUTHORIZED = "ows-abacus-readonly-tester-unauthorized@theorchard.io" READONLY_USER_PASSWORD_SECRET_NAME = "AUTH0_ABACUS_READONLY_USER_PASSWORD" AUTH0_CLIENT_ID_SECRET_NAME = "AUTH0_ABACUS_APP_CLIENT_ID" AUTH0_CLIENT_SECRET_SECRET_NAME = "AUTH0_ABACUS_APP_CLIENT_SECRET" AUTH_AUDIENCE = "https://workstation.qaorch.com/api" @dataclass class LoginSecrets: """Holds secrets for integration tests.""" auth_client_id: str auth_client_secret: str password: str @dataclass class LoginInfo(LoginSecrets): """Extends LoginSecrets and adds a username.""" username: str def login_from_secrets_manager( password_secret_name: str, auth_client_id_secret_name: str, auth_client_secret_secret_name: str, ) -> LoginSecrets: """Fetch Auth0 secrets from AWS Secret Manager.""" secrets_manager_client = PythonSecretsManager( environment=QA_ENVIRONMENT, service_name=APPLICATION ) password = secrets_manager_client.get_cred(password_secret_name) auth_client_id = secrets_manager_client.get_cred(auth_client_id_secret_name) auth_client_secret = secrets_manager_client.get_cred(auth_client_secret_secret_name) return LoginSecrets( password=password, auth_client_id=auth_client_id, auth_client_secret=auth_client_secret, ) def generate_auth_token(login_info: LoginInfo) -> str: """Generate Auth0 token for settings test user.""" data = { "grant_type": "password", "username": login_info.username, "password": login_info.password, "audience": AUTH_AUDIENCE, "scope": "", "client_id": login_info.auth_client_id, "client_secret": login_info.auth_client_secret, } r = requests.post("https://qa-orchard.auth0.com/oauth/token", data=data) resp = r.json() if "error" in resp: raise ValueError(f"Auth0 error occurred: {resp}") return str(resp["access_token"])