"""Application configuration.""" import base64 import logging import os from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from secrets_manager.flask_ext import FlaskSecretsManager import sqlalchemy # Service information SERVICE_NAME = 'ows-conflict-manager' SERVICE_VERSION = '1.0.0' # Production environment PROD_ENVIRONMENT = 'prod' DEV_ENVIRONMENT = 'dev' QA_ENVIRONMENT = 'qa' TEST_ENVIRONMENT = 'test' ENVIRONMENT = os.environ.get('Environment', DEV_ENVIRONMENT) ADMIN_PROFILE_ID = '179' ADMIN_PROFILE_TYPE = 'OrchAdminProfile' # Init secrets manager secrets_manager_client = FlaskSecretsManager( application_context=False, environment=ENVIRONMENT, service_name=SERVICE_NAME) # Errors and loggers SENTRY_DSN = os.environ.get('SENTRY_DSN') LOGGER_LEVEL = os.environ.get('LOG_LEVEL', logging.INFO) LOGGER_NAME = 'ows1' # Generic handlers HEALTH_CHECK = '/hello/' # Database settings POOL_CLASS = sqlalchemy.pool.QueuePool POOL_SIZE = 5 POOL_RECYCLE = 3600 # Avoids connections going stale, recycle after 1 hour POOL_MAX_OVERFLOW = 10 POOL_PRE_PING = True # retrieve the secrets from Secrets Manager SNOWFLAKE_USER = os.environ.get('SNOWFLAKE_USER') SNOWFLAKE_ACCOUNT = os.environ.get('SNOWFLAKE_ACCOUNT') SNOWFLAKE_ROLE = os.environ.get('SNOWFLAKE_ROLE') SNOWFLAKE_WAREHOUSE = os.environ.get('SNOWFLAKE_WAREHOUSE') SNOWFLAKE_SCHEMA = os.environ.get('SNOWFLAKE_SCHEMA', 'DEV') try: private_key_string = secrets_manager_client.get_cred('SNOWFLAKE_KEY') private_key = base64.b64decode( bytes(private_key_string, encoding='utf-8')) except: # noqa: E722 private_key = None if not private_key: # Default for local dev SNOWFLAKE_PRIVATE_KEY_PATH = os.environ.get('HOME') + \ '/.ssh/snowflake/rsa_key.p8' try: SNOWFLAKE_PRIVATE_KEY_PATH = secrets_manager_client.get_cred( 'SNOWFLAKE_PRIVATE_KEY_PATH') or SNOWFLAKE_PRIVATE_KEY_PATH SNOWFLAKE_KEY_PASSPHRASE = secrets_manager_client.get_cred( 'SNOWFLAKE_KEY_PASSPHRASE') or os.environ.get( 'SNOWFLAKE_KEY_PASSPHRASE') except Exception: SNOWFLAKE_KEY_PASSPHRASE = None if SNOWFLAKE_KEY_PASSPHRASE: with open(SNOWFLAKE_PRIVATE_KEY_PATH, 'rb') as key: p_key = serialization.load_pem_private_key( key.read(), password=SNOWFLAKE_KEY_PASSPHRASE.encode(), backend=default_backend() ) private_key = p_key.private_bytes( encoding=serialization.Encoding.DER, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption()) if private_key: SNOWFLAKE_CONNECT_ARGS = {'private_key': private_key} else: SNOWFLAKE_CONNECT_ARGS = {} CONFLICT_MANAGER_DATABASE = ( os.environ.get('CONFLICT_MANAGER_DATABASE', 'OWS_CONFLICT_MANAGER')) FACTS_DATABASE = os.environ.get('FACTS_DATABASE', 'FACTS') ART_RELATIONS_DATABASE_SCHEMA = ( os.environ.get( 'ART_RELATIONS_DATABASE', 'ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS')) OPENSEARCH_HOST = os.environ.get('OPENSEARCH_HOST') OPENSEARCH_NEW_CONFLICTS_INDEX = os.environ.get( 'OPENSEARCH_INDEX', 'conflict_write') OPENSEARCH_PORT = os.environ.get('OPENSEARCH_PORT', 443) OPENSEARCH_USE_SSL = os.environ.get('OPENSEARCH_USE_SSL', True) OPENSEARCH_TIMEOUT = 30 OPENSEARCH_MAX_RETRIES = 5 DATE_FORMAT = '%Y-%m-%d' MAX_NOTE_LENGTH = 10000 MAX_GROUPED_CONFLICTS_IDS_COUNT = 2000