"""Config file for lambda function.""" from enum import StrEnum import os import tempfile from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from secrets_manager.lambda_ext import LambdaSecretsManager APPLICATION_NAME = 'lambda-moneyhub-generate-attachments' # AWS region configuration DEFAULT_AWS_REGION = 'us-east-1' AWS_REGION = os.environ.get('AWS_REGION', DEFAULT_AWS_REGION) # Environment setup DEV_ENVIRONMENT = 'dev' QA_ENVIRONMENT = 'qa' PROD_ENVIRONMENT = 'prod' TEST_ENVIRONMENT = 'test' ENVIRONMENT = os.environ.get('ENVIRONMENT', DEV_ENVIRONMENT) # Numbers ROUNDING_DECIMAL_PLACES = 6 # Path to the wkhtmltopdf executable on your computer (run `which wkhtmltopdf` to know) WKHTMLTOPDF_BIN_PATH = os.environ.get('WKHTMLTOPDF_BIN_PATH', '/opt/bin/wkhtmltopdf') # Output path for files FILE_OUTPUT_PATH = os.environ.get('FILE_OUTPUT_PATH') or tempfile.gettempdir() # S3 bucket S3_BUCKET = f'{ENVIRONMENT}-moneyhub-attachments' # Credentials SENTRY_DSN = os.environ.get('SENTRY_DSN') or None snowflake_private_key = os.environ.get('SNOWFLAKE_PRIVATE_KEY') if ENVIRONMENT in [PROD_ENVIRONMENT, QA_ENVIRONMENT]: secrets_manager_client = LambdaSecretsManager( environment=ENVIRONMENT, service_name=APPLICATION_NAME ) passphrase = secrets_manager_client.get_cred('SNOWFLAKE_KEY_PASSPHRASE') private_key = secrets_manager_client.get_cred('SNOWFLAKE_PRIVATE_KEY') private_key_bytes = bytes(private_key, 'utf-8') else: passphrase = os.environ.get('SNOWFLAKE_KEY_PASSPHRASE') private_key_path = os.environ.get('SNOWFLAKE_PRIVATE_KEY_PATH') private_key = os.environ.get('SNOWFLAKE_PRIVATE_KEY') if private_key_path: with open(private_key_path, 'rb') as key: private_key_bytes = key.read() elif private_key: private_key_bytes = bytes(private_key, 'utf-8') elif ENVIRONMENT != TEST_ENVIRONMENT: raise ValueError('SNOWFLAKE_PRIVATE_KEY_PATH or SNOWFLAKE_PRIVATE_KEY must be set.') decrypted_key_bytes: bytes | None if ENVIRONMENT != TEST_ENVIRONMENT: passphrase_bytes = bytes(passphrase, 'utf-8') decrypted_key = serialization.load_pem_private_key( private_key_bytes, password=passphrase_bytes, backend=default_backend(), ) decrypted_key_bytes = decrypted_key.private_bytes( encoding=serialization.Encoding.DER, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption(), ) else: decrypted_key_bytes = None # DB Connectors SNOWFLAKE_DB_CONFIG = { 'role': os.environ.get('SNOWFLAKE_ROLE'), 'warehouse': os.environ.get('SNOWFLAKE_WAREHOUSE'), 'db': os.environ.get('SNOWFLAKE_DATABASE'), 'database': os.environ.get('SNOWFLAKE_DATABASE'), 'schema': os.environ.get('SNOWFLAKE_SCHEMA'), 'user': os.environ.get('SNOWFLAKE_USER'), 'private_key': decrypted_key_bytes, 'account': os.environ.get('SNOWFLAKE_ACCOUNT'), } # OWS Profile OWS_PROFILE_TYPE = os.environ.get('OWS_PROFILE_TYPE') OWS_PROFILE_ID = os.environ.get('OWS_PROFILE_ID') OWS_PROFILE_ROLES = 'administrator' # OWS Authentication OWS_CLIENT_TOKEN = os.environ.get('OWS_CLIENT_TOKEN') # Signing Entity Constants ORCHARD_UK_PAYMENT_ENTITY = 7 ORCHARD_NORWAY_PAYMENT_ENTITY = 9 ORCHARD_PAYMENT_ENTITIES = [ORCHARD_UK_PAYMENT_ENTITY, ORCHARD_NORWAY_PAYMENT_ENTITY] ORCHARD_SIGNING_ENTITY_MAPPING = { ORCHARD_UK_PAYMENT_ENTITY: 15, # Essential Music & Marketing Limited ORCHARD_NORWAY_PAYMENT_ENTITY: 16, # The Orchard AS } # Source for this: `company code` column in the `reference_signing_entity` table ALTAFONTE_SAP_IDS = ['2981', '6020', '6021'] AWAL_SAP_IDS = ['2820', '2821', '4914', '4915', '4916'] KNR_SAP_IDS = ['4917', '4918', '4919', '4920'] ORCHARD_SAP_IDS = ['2963'] class Countries(StrEnum): """Countries Enum.""" SPAIN = 'ESP'