import os from celery.schedules import crontab def bool_env(name, default=False): return os.environ.get(name, default) in ("1", "True", True) class Settings(object): FLASK_ENV = os.environ.get("FLASK_ENV") JSON_LOGS = bool_env("JSON_LOGS") LOGLEVEL = os.environ.get("LOGLEVEL", "INFO") SESSION_COOKIE_SECURE = True SECRET_KEY = os.environ.get("SESSION_SECRET") FLASK_STATIC_DIGEST_HOST_URL = os.environ.get("STATIC_URL") DNA_IDENTITY_PRIVATE_KEY = os.environ.get("DNA_IDENTITY_PRIVATE_KEY") DNA_IDENTITY_PUBLIC_KEY = os.environ.get("DNA_IDENTITY_PUBLIC_KEY") PGDB_HOST = os.environ.get("PGDB_HOST") PGDB_NAME = os.environ.get("PGDB_NAME") PGDB_PASS = os.environ.get("PGDB_PASS") PGDB_PORT = os.environ.get("PGDB_PORT", "5432") PGDB_USER = os.environ.get("PGDB_USER") SQLALCHEMY_DATABASE_URI = "postgresql://{}:{}@{}:{}/{}".format( PGDB_USER, PGDB_PASS, PGDB_HOST, PGDB_PORT, PGDB_NAME ) SQLALCHEMY_TRACK_MODIFICATIONS = False AUTH0_DOMAIN = os.environ.get("AUTH0_DOMAIN") AUTH0_CLIENT_ID = os.environ.get("AUTH0_CLIENT_ID") AUTH0_CLIENT_SECRET = os.environ.get("AUTH0_CLIENT_SECRET") AUTH0_ACCESS_TOKEN = os.environ.get("AUTH0_ACCESS_TOKEN") AUTH0_ACCESS_TOKEN_EXPIRATION = ( int(os.environ.get("AUTH0_ACCESS_TOKEN_EXPIRATION", 0)) or None ) SENTRY_DSN = os.environ.get("SENTRY_DSN") USM_HOSTNAME = os.environ.get("USM_HOSTNAME") USM_CLIENT_ID = os.environ.get("USM_CLIENT_ID") USM_CLIENT_SECRET = os.environ.get("USM_CLIENT_SECRET") USM_AUTHORIZE_PATH = os.environ.get( "USM_AUTHORIZE_PATH", "/oauth2/openid/v1/authorize" ) USM_TOKEN_PATH = os.environ.get( "USM_TOKEN_PATH", "/oauth2/openid/v1/token" ) USM_LOGOUT_PATH = os.environ.get( "USM_LOGOUT_PATH", "/oauth2/openid/v1/logout" ) USM_GRAPH_PATH = os.environ.get("USM_GRAPH_PATH", "/graph/v1") USM_EXTERNAL_USER_PATH = os.environ.get( "USM_EXTERNAL_USER_PATH", "/ws/client/user/" ) USM_UTIL_PATH = os.environ.get("USM_UTIL_PATH", "/oauth2/util") USM_GRAPH_MIN_SEARCH_TERM_LENGTH = 3 USM_GRAPH_RATE_LIMIT = os.environ.get("USM_GRAPH_RATE_LIMIT", "2/second") RATELIMIT_STORAGE_URL = os.environ.get( "RATELIMIT_STORAGE_URL", "memory://" ) RECENT_ACCOUNT_SEARCHES_QTY = 20 RATELIMIT_ENABLED = bool_env("RATELIMIT_ENABLED") RELATED_CLAIMS_NAMESPACE = os.environ.get( "RELATED_CLAIMS_NAMESPACE", "atlasum" ) NO_MFA_ENABLED = bool_env("NO_MFA_ENABLED") # Celery CELERY = { "beat_schedule": { "sync-internal-domains": { "task": "atlas_um.tasks.sync_internal_domains_with_usm", "schedule": crontab(hour=4, minute=0), }, "updating_token_length": { "task": "atlas_um.tasks.task_orchestrate_update_token_length_for_dna_accounts", # noqa "schedule": crontab(hour=4, minute=30), }, "send_access_expiration_notifications": { "task": "atlas_um.tasks.task_orchestrate_send_access_expiration_notifications", # noqa "schedule": crontab(hour=4, minute=45), }, "accounts_validation_task": { "task": "atlas_um.tasks.accounts_validation_task", "schedule": crontab(hour=4, minute=0), }, }, "task_always_eager": bool_env("CELERY_TASK_ALWAYS_EAGER"), } ITEMS_PER_PAGE = 10 DOMAIN = os.environ.get("DOMAIN") ORIGINS = os.environ.get("ORIGINS", "").split(",") # Used to legitimate auth proxies and as a result setting of token # cookies for their root domains. ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", "").split(",") AMPLITUDE_API_KEY = os.environ.get("AMPLITUDE_API_KEY") REDIS_URL = os.environ.get("REDIS_URL") MAX_TOKEN_LENGTH = int(os.environ.get("MAX_TOKEN_LENGTH", 4096)) DNA_BEARER_TOKEN_COOKIE_NAME = os.environ.get( "DNA_BEARER_TOKEN_COOKIE_NAME", "dna_bearer_token" ) DNA_REFRESH_TOKEN_COOKIE_NAME = os.environ.get( "DNA_REFRESH_TOKEN_COOKIE_NAME", "dna_refresh_token" ) TOKEN_COOKIES_MAX_AGE = int( os.environ.get("DEFAULT_TOKEN_COOKIES_MAX_AGE", 60 * 60 * 24 * 30) ) DEFAULT_REFRESH_TOKEN_TTL = int( os.environ.get("DEFAULT_REFRESH_TOKEN_TTL", 60 * 60 * 24 * 30) ) SHORT_LIVING_M2M_TOKEN_TTL = 60 * 60 JWT_TOKEN_ISS = os.environ.get("JWT_TOKEN_ISS", "atlasum") JWT_TOKEN_KID = os.environ.get("JWT_TOKEN_KID") MAIN_INTERNAL_DOMAIN = "sonymusic.com" M2M_AUTH_HOST = os.environ.get("M2M_AUTH_HOST") CORE_NOTIFICATIONS_CLIENT_ID = os.environ.get( "CORE_NOTIFICATIONS_CLIENT_ID" ) CORE_NOTIFICATIONS_CLIENT_SECRET = os.environ.get( "CORE_NOTIFICATIONS_CLIENT_SECRET" ) CORE_NOTIFICATIONS_AUDIENCE = os.environ.get("CORE_NOTIFICATIONS_AUDIENCE") CORE_NOTIFICATIONS_HOST = os.environ.get("CORE_NOTIFICATIONS_HOST") CORE_IMAGES_HOST = os.environ.get("CORE_IMAGES_HOST") DEV_TOKEN_ENABLED = bool_env("DEV_TOKEN_ENABLED") API_DOCS_ENABLED = bool_env("API_DOCS_ENABLED") # cache CACHE_IS_DISABLED = bool_env("CACHE_IS_DISABLED") CACHE_TYPE = "NullCache" if CACHE_IS_DISABLED else "RedisCache" CACHE_DEFAULT_TIMEOUT = 60 * 15 CACHE_KEY_PREFIX = "cache" CACHE_REDIS_URL = REDIS_URL EVENT_BUS_SOURCE = "atlas-um" EVENT_BUS_NAME = os.environ.get("EVENT_BUS_NAME") AWS_DEFAULT_REGION = os.environ.get("AWS_DEFAULT_REGION") ACCOUNTS_EXPIRATION_NOTIFY_DAYS = 7