Skip to content
Snippets Groups Projects
config.py 3.69 KiB
from werkzeug.middleware.proxy_fix import ProxyFix
import logging
import os


ROOT_DIR = os.path.abspath(os.path.dirname(__file__))


class Config:
    ''' # Flask # '''
    SECRET_KEY = os.environ.get('SECRET_KEY', 'hard to guess string')
    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}