/
settings.py
140 lines (119 loc) Β· 5.55 KB
/
settings.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# -*- coding: utf-8 -*-
"""Application configuration."""
import os
from dotenv import load_dotenv
from .utils import strtobool
load_dotenv()
os_env = os.environ
class Config(object):
"""Base configuration."""
SECRET_KEY = os_env.get('DRIBDAT_SECRET', 'A-big-scary-Secret-goes-HERE.')
SECRET_API = os_env.get('DRIBDAT_APIKEY', None)
# Customization options
DRIBDAT_CLOCK = os_env.get('DRIBDAT_CLOCK', 'down')
DRIBDAT_STYLE = os_env.get('DRIBDAT_STYLE', '')
DRIBDAT_THEME = os_env.get('DRIBDAT_THEME', 'simplex')
# Application options
DRIBDAT_USER_APPROVE = os_env.get('DRIBDAT_USER_APPROVE', 'False')
DRIBDAT_USER_APPROVE = bool(strtobool(DRIBDAT_USER_APPROVE))
DRIBDAT_NOT_REGISTER = os_env.get('DRIBDAT_NOT_REGISTER', 'False')
DRIBDAT_NOT_REGISTER = bool(strtobool(DRIBDAT_NOT_REGISTER))
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))
# Single sign-on support
OAUTH_TYPE = os_env.get('OAUTH_TYPE', '').lower()
OAUTH_ID = os_env.get('OAUTH_ID', None)
OAUTH_SECRET = os_env.get('OAUTH_SECRET', None)
OAUTH_DOMAIN = os_env.get('OAUTH_DOMAIN', None)
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
OAUTH_SKIP_LOGIN = bool(strtobool(os_env.get('OAUTH_SKIP_LOGIN', 'False')))
OAUTH_LINK_REGISTER = os_env.get('OAUTH_LINK_REGISTER', None)
# Mail service support
MAIL_PORT = os_env.get('MAIL_PORT', 25)
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)
MAIL_USE_TLS = bool(strtobool(os_env.get('MAIL_USE_TLS', 'False')))
MAIL_USE_SSL = bool(strtobool(os_env.get('MAIL_USE_SSL', 'False')))
# Application settings
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
CACHE_TYPE = 'SimpleCache'
CACHE_NO_NULL_WARNING = True
SQLALCHEMY_TRACK_MODIFICATIONS = False
# Server settings
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')))
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:")
TIME_ZONE = os_env.get('TIME_ZONE', 'UTC')
MAX_CONTENT_LENGTH = int(os_env.get('MAX_CONTENT_LENGTH', 1 * 1024 * 1024))
# 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)
ANALYTICS_FATHOM_SITE = os_env.get('ANALYTICS_FATHOM_SITE', None)
# 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)
S3_ENDPOINT = os_env.get('S3_ENDPOINT', None)
class ProdConfig(Config):
"""Production configuration."""
ENV = 'prod'
DEBUG = False
DEBUG_TB_ENABLED = False # Disable Debug toolbar
PREFERRED_URL_SCHEME = 'https' # For generating external URLs
CACHE_TYPE = os_env.get('CACHE_TYPE', 'SimpleCache')
CACHE_REDIS_URL = os_env.get('CACHE_REDIS_URL', '')
if CACHE_REDIS_URL:
CACHE_TYPE = 'RedisCache'
CACHE_MEMCACHED_SERVERS = os_env.get('MEMCACHED_SERVERS', '')
CACHE_MEMCACHED_USERNAME = os_env.get('MEMCACHED_USERNAME', '')
CACHE_MEMCACHED_PASSWORD = os_env.get('MEMCACHED_PASSWORD', '')
if CACHE_MEMCACHED_SERVERS:
CACHE_TYPE = 'MemcachedCache'
CACHE_DEFAULT_TIMEOUT = int(os_env.get('CACHE_DEFAULT_TIMEOUT', '300'))
SQLALCHEMY_DATABASE_URI = os_env.get(
'DATABASE_URL', 'postgresql://localhost/example')
if SQLALCHEMY_DATABASE_URI.startswith('postgres:'):
SQLALCHEMY_DATABASE_URI = SQLALCHEMY_DATABASE_URI.replace(
'postgres:', 'postgresql:')
class DevConfig(Config):
"""Development configuration."""
ENV = 'dev'
DEBUG = True
DB_NAME = 'dev.db'
SERVER_NAME = '127.0.0.1:5000'
# 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)
DEBUG_TB_ENABLED = True
ASSETS_DEBUG = True # Don't bundle/minify static assets
WTF_CSRF_ENABLED = False # Allows form testing
class TestConfig(Config):
"""Test configuration."""
TESTING = True
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'sqlite://'
SERVER_NAME = 'localhost'
# Pytest complains, but not sure how to fully change server name
# SERVER_NAME = 'localhost.localdomain' #results in 404 errors
WTF_CSRF_ENABLED = False # Allows form testing
PRESERVE_CONTEXT_ON_EXCEPTION = False