""" * Version: 0.3 * Purposes: * Module `labs_core.server_scope` serves as an information provider for the front end server. * The suggested usage is calling it's `get_xxx` routines and cache the information at the front end server side during startup for server process lifecycle. """ import boto3, json from botocore.exceptions import ClientError from django.conf import settings def _get_secret(secret_name: str) -> dict: region_name = "us-west-2" session = boto3.session.Session() client = session.client(service_name="secretsmanager", region_name=region_name) try: get_secret_value_response = client.get_secret_value(SecretId=secret_name) except ClientError as e: raise e secret = json.loads(get_secret_value_response["SecretString"]) return secret def get_database_connection_info() -> dict: return { "username": settings.DATABASES["default"]["USER"], "password": settings.DATABASES["default"]["PASSWORD"], "host": settings.DATABASES["default"]["HOST"], "port": settings.DATABASES["default"]["PORT"], "dbname": settings.DATABASES["default"]["NAME"], } def get_server_keys() -> dict: secret = _get_secret("session-key-labs-prod-ro") return { "session-encryption-key": secret["session-encryption-key"], "cloud-serverless-pool-public-key": secret["cloud-serverless-pool-public-key"], "cloud-serverless-pool-private-key": secret[ "cloud-serverless-pool-private-key" ], }