"""Configuration for Grass.""" import json import logging import os from urllib.request import urlopen from dotenv import load_dotenv from secrets_manager.python_ext import PythonSecretsManager # List of all our existing environments: # # - test: the test environment is used by py.test to perform small adjustments # to the code. For instance: create the tables etc. # # - dev: the dev environment is used for development purposes. It points to # a different set of databases. # # - live: production environment. Points directly to all our production # servers. TEST_ENVIRONMENT = 'test' UAT_ENVIRONMENT = 'uat' QA_ENVIRONMENT = 'qa' DEV_ENVIRONMENT = 'dev' PROD_ENVIRONMENT = 'prod' # TODO: uppercase environment. environment = os.environ.get('Environment', 'dev') if environment == DEV_ENVIRONMENT: load_dotenv(verbose=True, dotenv_path='.env') # AUTH0 AUTH0_DOMAIN = os.environ.get('AUTH0_DOMAIN', 'dev-orchard.auth0.com') AUTH0_API_AUDIENCE = os.environ.get('AUTH0_API_AUDIENCE') AUTH0_ALGORITHMS = ['RS256'] DEFAULT_ISSUERS = 'https://qalogin.theorchard.com/, https://qa-orchard.auth0.com/' PROD_ISSUERS = 'https://login.distroauth.com/, https://workstation.auth0.com/' AUTH_ISSUERS = os.environ.get( 'AUTH_ISSUERS', PROD_ISSUERS if environment == 'prod' else DEFAULT_ISSUERS ) AUTH_ISSUERS_LIST = AUTH_ISSUERS.replace(' ', '').split(',') AUTH0_JWKS = json.loads( urlopen(f'{AUTH_ISSUERS_LIST[0]}.well-known/jwks.json').read().decode() ) # Version SERVICE_NAME = 'ows-grass' SERVICE_VERSION = '1.0.0' # Health check HEALTH_CHECK = '/hello/' # Logger Name LOGGER_NAME = 'grass' LOGGER_LEVEL = os.environ.get('LOGGER_LEVEL', logging.INFO) LOGGER_DSN = os.environ.get('LOGGER_DSN') LOGGER_HANDLER_ASYNC = int(os.environ.get('LOGGER_HANDLER_ASYNC', 0)) # List of all the reserved keys that are not passed through requests. RESERVED_KEYS = set(['client', 'user', 'session', 'token']) # Session duration SESSION_DURATION = int(os.environ.get('SESSION_DURATION', 60)) # Database configuration DB_URL = os.environ.get('DB_URL', 'sqlite://') DB_POOL_RECYCLE_TIMEOUT = os.environ.get('DB_POOL_RECYCLE_TIMEOUT') # Redis configuration REDIS_HOST = os.environ.get('REDIS_HOST') REDIS_PORT = os.environ.get('REDIS_PORT') # Sentry SENTRY = os.environ.get('SENTRY_DSN') or '' CACHE_CONFIG = dict( # Required CACHE_ENABLED=False, # Cache Options CACHE_TYPE='redis', CACHE_REDIS_URL=f'redis://{REDIS_HOST}:{REDIS_PORT}/0', ) # Information regarding the ows-auth microservice OWS_AUTH = 'https://qa-auth.theorchard.io' if environment == PROD_ENVIRONMENT: OWS_AUTH = 'https://auth.theorchard.io' # Max clients for AsyncHTTPClient fetch() operations MAX_CLIENTS = 300 # Thread pool size for ThreadedResolver NUM_THREADS = 10 RULES_YML_PATH = os.path.dirname(os.path.realpath(__file__)) + '/rules/' # Jwt config variables JWT_SERVICE_NAME = os.environ.get('JWT_SERVICE_NAME') JWT_SECRET_NAME = os.environ.get('JWT_SECRET_NAME') JWT_REFRESH_INTERVAL = os.environ.get('JWT_REFRESH_INTERVAL') # Audiences M2M_API_AUDIENCE = f'https://{environment}-ows.theorchard.io' SEND_METRICS_TO_DD_ENABLED = ( os.environ.get('SEND_METRICS_TO_DD_ENABLED', 'false').lower() == 'true' ) datadog_secrets_manager_client = PythonSecretsManager( application_context=False, environment=environment, service_name='datadog', ) DD_API_KEY = datadog_secrets_manager_client.get_cred('DD_API_KEY') DD_APP_KEY = datadog_secrets_manager_client.get_cred('DD_APP_KEY')