import json from typing import Dict, Optional from werkzeug.security import generate_password_hash from service.conf import settings from service.core.exceptions import ImproperlyConfigured def get_appsync_profile(db_name: str) -> str: if settings.PROFILE == "auto_test": return "devel" # TODO mock appsync calls for tests globally db_name_to_profile_map = { "fansifter": "devel", "fansifter-test": "test", "fansifter-live": "live", } try: return db_name_to_profile_map[db_name] except KeyError: raise ImproperlyConfigured(f"Unknown database name: {db_name}") _airflow_api_credentials: Optional[Dict[str, str]] = None def get_airflow_api_credentials(db_name: str) -> Dict[str, str]: from .secrets import get_secret global _airflow_api_credentials if _airflow_api_credentials is None: password_str = get_secret("airflow-ui-pass") secret = json.loads(password_str) appsync_profile = get_appsync_profile(db_name) env = "dev" if appsync_profile == "devel" else appsync_profile _airflow_api_credentials = { "host": f"https://airflow-{env}.fansifter.cloud/api/v1", "username": secret["username"], "password": secret["password"], } return _airflow_api_credentials _admin_user_credentials: Optional[Dict[str, str]] = None def get_admin_user_credentials(profile: str) -> Dict[str, str]: from .secrets import get_secret global _admin_user_credentials if _admin_user_credentials is None: if profile in {"auto_test", "local"}: return {"test": generate_password_hash("test")} else: return { user: generate_password_hash(passwd) for user, passwd in json.loads( get_secret("basic-admin-tools-access") ).items() } return _admin_user_credentials