from werkzeug.middleware.proxy_fix import ProxyFix import logging import os ROOT_DIR = os.path.abspath(os.path.dirname(__file__)) class Config: ''' # Flask # ''' PREFERRED_URL_SCHEME = os.environ.get('PREFERRED_URL_SCHEME', 'http') SECRET_KEY = os.environ.get('SECRET_KEY', 'hard to guess string') SERVER_NAME = os.environ.get('SERVER_NAME') SESSION_COOKIE_SECURE = \ os.environ.get('SESSION_COOKIE_SECURE', 'false').lower() == 'true' ''' # Flask-Login # ''' REMEMBER_COOKIE_HTTPONLY = True REMEMBER_COOKIE_SECURE = \ os.environ.get('REMEMBER_COOKIE_SECURE', 'false').lower() == 'true' ''' # Flask-Mail # ''' MAIL_DEFAULT_SENDER = os.environ.get('MAIL_DEFAULT_SENDER') MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') MAIL_PORT = int(os.environ.get('MAIL_PORT')) MAIL_SERVER = os.environ.get('MAIL_SERVER') MAIL_USERNAME = os.environ.get('MAIL_USERNAME') MAIL_USE_SSL = os.environ.get('MAIL_USE_SSL', 'false').lower() == 'true' MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS', 'false').lower() == 'true' ''' # Flask-SQLAlchemy # ''' SQLALCHEMY_RECORD_QUERIES = True SQLALCHEMY_TRACK_MODIFICATIONS = False ''' # nopaque # ''' NOPAQUE_ADMIN = os.environ.get('NOPAQUE_ADMIN') NOPAQUE_CONTACT = os.environ.get('NOPAQUE_CONTACT') NOPAQUE_DATA_DIR = os.environ.get('NOPAQUE_DATA_DIR', '/mnt/nopaque') NOPAQUE_MAIL_SUBJECT_PREFIX = '[nopaque]' NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI = \ os.environ.get('NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI') NOPAQUE_USERNAME_REGEX = '^[A-Za-zÄÖÜäöüß0-9_.]*$' @classmethod def init_app(cls, app): # Set up logging according to the corresponding (NOPAQUE_LOG_*) # environment variables basic_config_kwargs = { 'datefmt': os.environ.get('NOPAQUE_LOG_DATE_FORMAT', '%Y-%m-%d %H:%M:%S'), 'filename': os.environ.get('NOPAQUE_LOG_FILE', os.path.join(ROOT_DIR, 'nopaque.log')), 'format': os.environ.get( 'NOPAQUE_LOG_FORMAT', '[%(asctime)s] %(levelname)s in ' '%(pathname)s (function: %(funcName)s, line: %(lineno)d): ' '%(message)s' ), 'level': os.environ.get('NOPAQUE_LOG_LEVEL', 'WARNING') } logging.basicConfig(**basic_config_kwargs) # Set up and apply the ProxyFix middleware according to the # corresponding (NOPAQUE_PROXY_FIX_*) environment variables proxy_fix_kwargs = { 'x_for': int(os.environ.get('NOPAQUE_PROXY_FIX_X_FOR', '0')), 'x_host': int(os.environ.get('NOPAQUE_PROXY_FIX_X_HOST', '0')), 'x_port': int(os.environ.get('NOPAQUE_PROXY_FIX_X_PORT', '0')), 'x_prefix': int(os.environ.get('NOPAQUE_PROXY_FIX_X_PREFIX', '0')), 'x_proto': int(os.environ.get('NOPAQUE_PROXY_FIX_X_PROTO', '0')) } app.wsgi_app = ProxyFix(app.wsgi_app, **proxy_fix_kwargs) class DevelopmentConfig(Config): ''' # Flask # ''' DEBUG = True ''' # Flask-SQLAlchemy # ''' SQLALCHEMY_DATABASE_URI = os.environ.get( 'SQLALCHEMY_DATABASE_URI', 'postgresql://nopaque:nopaque@db/nopaque_dev' ) class ProductionConfig(Config): ''' # Flask-SQLAlchemy # ''' SQLALCHEMY_DATABASE_URI = os.environ.get( 'SQLALCHEMY_DATABASE_URI', 'postgresql://nopaque:nopaque@db/nopaque') class TestingConfig(Config): ''' # Flask # ''' TESTING = True WTF_CSRF_ENABLED = False ''' # Flask-SQLAlchemy # ''' SQLALCHEMY_DATABASE_URI = os.environ.get( 'SQLALCHEMY_DATABASE_URI', 'postgresql://nopaque:nopaque@db/nopaque_test' ) config = {'development': DevelopmentConfig, 'production': ProductionConfig, 'testing': TestingConfig}