dribdat/dribdat/settings.py

147 lines
5.9 KiB
Python
Raw Normal View History

2015-09-15 07:46:35 +00:00
# -*- coding: utf-8 -*-
2016-09-18 21:28:46 +00:00
"""Application configuration."""
2015-09-15 07:46:35 +00:00
import os
2020-06-19 11:58:07 +00:00
from dotenv import load_dotenv
2022-02-11 13:42:44 +00:00
from .utils import strtobool
2015-09-15 07:46:35 +00:00
2020-06-19 11:58:07 +00:00
load_dotenv()
2015-09-15 07:46:35 +00:00
os_env = os.environ
2021-09-29 08:26:18 +00:00
2015-09-15 07:46:35 +00:00
class Config(object):
2016-09-18 21:28:46 +00:00
"""Base configuration."""
2016-10-29 02:43:05 +00:00
SECRET_KEY = os_env.get('DRIBDAT_SECRET', 'A-big-scary-Secret-goes-HERE.')
2021-03-13 21:03:17 +00:00
SECRET_API = os_env.get('DRIBDAT_APIKEY', None)
2020-11-08 00:04:44 +00:00
2021-03-13 21:03:17 +00:00
# Customization options
2020-11-08 00:04:44 +00:00
DRIBDAT_CLOCK = os_env.get('DRIBDAT_CLOCK', 'down')
DRIBDAT_STYLE = os_env.get('DRIBDAT_STYLE', '')
2021-03-13 21:03:17 +00:00
DRIBDAT_THEME = os_env.get('DRIBDAT_THEME', 'simplex')
2023-08-15 15:43:16 +00:00
DRIBDAT_STAGE = os_env.get('DRIBDAT_STAGE', '')
2021-03-13 21:03:17 +00:00
# Application options
2024-03-19 21:58:37 +00:00
DRIBDAT_ALLOW_LOGINS = os_env.get('DRIBDAT_ALLOW_LOGINS', 'True')
2024-03-19 14:40:13 +00:00
DRIBDAT_ALLOW_LOGINS = bool(strtobool(DRIBDAT_ALLOW_LOGINS))
2022-09-15 21:47:29 +00:00
DRIBDAT_NOT_REGISTER = os_env.get('DRIBDAT_NOT_REGISTER', 'False')
DRIBDAT_NOT_REGISTER = bool(strtobool(DRIBDAT_NOT_REGISTER))
2024-03-19 14:40:13 +00:00
DRIBDAT_USER_APPROVE = os_env.get('DRIBDAT_USER_APPROVE', 'False')
DRIBDAT_USER_APPROVE = bool(strtobool(DRIBDAT_USER_APPROVE))
2022-09-15 21:47:29 +00:00
DRIBDAT_ALLOW_EVENTS = os_env.get('DRIBDAT_ALLOW_EVENTS', 'False')
DRIBDAT_ALLOW_EVENTS = bool(strtobool(DRIBDAT_ALLOW_EVENTS))
DRIBDAT_SOCIAL_LINKS = os_env.get('DRIBDAT_SOCIAL_LINKS', 'True')
DRIBDAT_SOCIAL_LINKS = bool(strtobool(DRIBDAT_SOCIAL_LINKS))
2020-11-08 00:04:44 +00:00
# Single sign-on support
2020-07-07 14:44:08 +00:00
OAUTH_TYPE = os_env.get('OAUTH_TYPE', '').lower()
2022-10-10 09:36:30 +00:00
OAUTH_ID = os_env.get('OAUTH_ID', None)
2020-07-07 14:44:08 +00:00
OAUTH_SECRET = os_env.get('OAUTH_SECRET', None)
OAUTH_DOMAIN = os_env.get('OAUTH_DOMAIN', None)
2022-10-10 09:36:30 +00:00
OAUTH_BASE_URL = os_env.get('OAUTH_BASE_URL', None)
OAUTH_TOKEN_URL = os_env.get('OAUTH_TOKEN_URL', None)
OAUTH_AUTH_URL = os_env.get('OAUTH_AUTH_URL', None)
# (Optional) Go directly to external login screen
2021-11-01 13:00:57 +00:00
OAUTH_SKIP_LOGIN = bool(strtobool(os_env.get('OAUTH_SKIP_LOGIN', 'False')))
2023-03-27 09:45:34 +00:00
OAUTH_LINK_REGISTER = os_env.get('OAUTH_LINK_REGISTER', None)
2023-04-24 20:27:44 +00:00
OAUTH_HELP_REGISTER = os_env.get('OAUTH_HELP_REGISTER', None)
2020-11-08 00:04:44 +00:00
2022-10-01 18:42:14 +00:00
# Mail service support
2022-10-02 22:36:49 +00:00
MAIL_PORT = os_env.get('MAIL_PORT', 25)
2022-10-01 18:42:14 +00:00
MAIL_SERVER = os_env.get('MAIL_SERVER', None)
MAIL_USERNAME = os_env.get('MAIL_USERNAME', None)
MAIL_PASSWORD = os_env.get('MAIL_PASSWORD', None)
MAIL_DEFAULT_SENDER = os_env.get('MAIL_DEFAULT_SENDER', None)
2022-10-08 18:11:16 +00:00
MAIL_USE_TLS = bool(strtobool(os_env.get('MAIL_USE_TLS', 'False')))
MAIL_USE_SSL = bool(strtobool(os_env.get('MAIL_USE_SSL', 'False')))
2022-10-01 18:42:14 +00:00
2020-11-08 00:04:44 +00:00
# Application settings
2015-09-15 07:46:35 +00:00
APP_DIR = os.path.abspath(os.path.dirname(__file__)) # This directory
PROJECT_ROOT = os.path.abspath(os.path.join(APP_DIR, os.pardir))
ASSETS_DEBUG = False
DEBUG_TB_ENABLED = False # Disable Debug toolbar
DEBUG_TB_INTERCEPT_REDIRECTS = False
2022-10-23 20:12:20 +00:00
CACHE_TYPE = 'SimpleCache'
2017-09-18 21:15:33 +00:00
CACHE_NO_NULL_WARNING = True
2016-04-07 12:37:55 +00:00
SQLALCHEMY_TRACK_MODIFICATIONS = False
2020-11-08 00:04:44 +00:00
# Server settings
2022-09-15 21:47:29 +00:00
SERVER_NAME = os_env.get('SERVER_URL', os_env.get(
'SERVER_NAME', 'localhost.localdomain:5000'))
SERVER_SSL = bool(strtobool(os_env.get('SERVER_SSL', 'False')))
2021-11-01 13:00:57 +00:00
SERVER_CORS = bool(strtobool(os_env.get('SERVER_CORS', 'True')))
SERVER_PROXY = bool(strtobool(os_env.get('SERVER_PROXY', 'False')))
CSP_DIRECTIVES = os_env.get(
'CSP_DIRECTIVES', "default-src * 'unsafe-inline' 'unsafe-eval' data:")
2020-11-02 11:32:42 +00:00
TIME_ZONE = os_env.get('TIME_ZONE', 'UTC')
2021-09-04 08:01:39 +00:00
MAX_CONTENT_LENGTH = int(os_env.get('MAX_CONTENT_LENGTH', 1 * 1024 * 1024))
2020-10-28 23:01:35 +00:00
2020-06-30 13:09:23 +00:00
# Configure web analytics providers
ANALYTICS_HREF = os_env.get('ANALYTICS_HREF', None)
ANALYTICS_SIMPLE = os_env.get('ANALYTICS_SIMPLE', None)
ANALYTICS_GOOGLE = os_env.get('ANALYTICS_GOOGLE', None)
ANALYTICS_FATHOM = os_env.get('ANALYTICS_FATHOM', None)
2015-09-15 07:46:35 +00:00
2020-11-08 00:04:44 +00:00
# S3 uploads support
S3_KEY = os_env.get('S3_KEY', None)
S3_SECRET = os_env.get('S3_SECRET', None)
S3_REGION = os_env.get('S3_REGION', 'eu-west-1')
S3_BUCKET = os_env.get('S3_BUCKET', None)
S3_FOLDER = os_env.get('S3_FOLDER', '')
S3_HTTPS = os_env.get('S3_HTTPS', None)
2021-03-06 06:33:31 +00:00
S3_ENDPOINT = os_env.get('S3_ENDPOINT', None)
2020-11-08 00:04:44 +00:00
2020-10-28 23:01:35 +00:00
2015-09-15 07:46:35 +00:00
class ProdConfig(Config):
"""Production configuration."""
2016-09-18 21:28:46 +00:00
2015-09-15 07:46:35 +00:00
ENV = 'prod'
DEBUG = False
2021-03-15 22:51:28 +00:00
DEBUG_TB_ENABLED = False # Disable Debug toolbar
PREFERRED_URL_SCHEME = 'https' # For generating external URLs
2022-02-11 13:42:44 +00:00
CACHE_TYPE = os_env.get('CACHE_TYPE', 'SimpleCache')
CACHE_REDIS_URL = os_env.get('CACHE_REDIS_URL', '')
2022-10-23 20:12:20 +00:00
if CACHE_REDIS_URL:
CACHE_TYPE = 'RedisCache'
2017-02-03 14:52:22 +00:00
CACHE_MEMCACHED_SERVERS = os_env.get('MEMCACHED_SERVERS', '')
CACHE_MEMCACHED_USERNAME = os_env.get('MEMCACHED_USERNAME', '')
CACHE_MEMCACHED_PASSWORD = os_env.get('MEMCACHED_PASSWORD', '')
2022-10-23 20:12:20 +00:00
if CACHE_MEMCACHED_SERVERS:
CACHE_TYPE = 'MemcachedCache'
2022-02-11 13:42:44 +00:00
CACHE_DEFAULT_TIMEOUT = int(os_env.get('CACHE_DEFAULT_TIMEOUT', '300'))
SQLALCHEMY_DATABASE_URI = os_env.get(
'DATABASE_URL', 'postgresql://localhost/example')
2021-03-15 22:51:28 +00:00
if SQLALCHEMY_DATABASE_URI.startswith('postgres:'):
SQLALCHEMY_DATABASE_URI = SQLALCHEMY_DATABASE_URI.replace(
'postgres:', 'postgresql:')
2015-09-15 07:46:35 +00:00
class DevConfig(Config):
"""Development configuration."""
2016-09-18 21:28:46 +00:00
2015-09-15 07:46:35 +00:00
ENV = 'dev'
DEBUG = True
DB_NAME = 'dev.db'
2022-02-11 14:26:54 +00:00
SERVER_NAME = '127.0.0.1:5000'
2015-09-15 07:46:35 +00:00
# Put the db file in project root
DB_PATH = os.path.join(Config.PROJECT_ROOT, DB_NAME)
SQLALCHEMY_DATABASE_URI = 'sqlite:///{0}'.format(DB_PATH)
2023-06-22 21:24:15 +00:00
CACHE_TYPE = 'NullCache' # Do not cache
DEBUG_TB_ENABLED = True # Enable the Debug Toolbar
2015-09-22 20:52:42 +00:00
ASSETS_DEBUG = True # Don't bundle/minify static assets
2017-01-18 15:35:32 +00:00
WTF_CSRF_ENABLED = False # Allows form testing
2015-09-15 07:46:35 +00:00
class TestConfig(Config):
2016-09-18 21:28:46 +00:00
"""Test configuration."""
2015-09-15 07:46:35 +00:00
TESTING = True
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'sqlite://'
SERVER_NAME = 'localhost'
2023-09-10 20:48:44 +00:00
MAIL_DEFAULT_SENDER = 'test@dribdat.cc'
2020-10-28 23:01:35 +00:00
# Pytest complains, but not sure how to fully change server name
2022-02-11 13:42:44 +00:00
# SERVER_NAME = 'localhost.localdomain' #results in 404 errors
2017-01-18 15:35:32 +00:00
WTF_CSRF_ENABLED = False # Allows form testing
2017-01-10 15:19:17 +00:00
PRESERVE_CONTEXT_ON_EXCEPTION = False
2023-06-05 11:59:15 +00:00
DRIBDAT_ALLOW_EVENTS = True # Allows anyone to create an event