Skip to content
Snippets Groups Projects
config.py 6.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • from dotenv import load_dotenv
    
    from flask import Flask
    
    from logging.handlers import RotatingFileHandler
    
    from werkzeug.middleware.proxy_fix import ProxyFix
    
    Stephan Porada's avatar
    Stephan Porada committed
    import logging
    
    basedir = os.path.abspath(os.path.dirname(__file__))
    load_dotenv(os.path.join(basedir, '.env'))
    
        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'
    
        TEMPLATES_AUTO_RELOAD = \
            os.environ.get('TEMPLATES_AUTO_RELOAD', 'false').lower() == 'true'
    
        ''' # Flask-Hashids '''
        HASHIDS_MIN_LENGTH = 32
    
    
        ''' # 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_DATABASE_URI = os.environ.get(
            'SQLALCHEMY_DATABASE_URI',
            'sqlite:///' + os.path.join(basedir, 'app.db')
        )
    
        SQLALCHEMY_RECORD_QUERIES = True
        SQLALCHEMY_TRACK_MODIFICATIONS = False
    
        ''' # nopaque # '''
        NOPAQUE_ADMIN = os.environ.get('NOPAQUE_ADMIN')
    
        NOPAQUE_DAEMON_ENABLED = \
            os.environ.get('NOPAQUE_DAEMON_ENABLED', 'true').lower() == 'true'
    
        NOPAQUE_DATA_DIR = \
            os.path.abspath(os.environ.get('NOPAQUE_DATA_DIR', '/mnt/nopaque'))
    
        NOPAQUE_DOCKER_REGISTRY = 'gitlab.ub.uni-bielefeld.de:4567'
        NOPAQUE_DOCKER_IMAGE_PREFIX = f'{NOPAQUE_DOCKER_REGISTRY}/sfb1288inf/'
        NOPAQUE_DOCKER_REGISTRY_USERNAME = \
            os.environ.get('NOPAQUE_DOCKER_REGISTRY_USERNAME')
        NOPAQUE_DOCKER_REGISTRY_PASSWORD = \
            os.environ.get('NOPAQUE_DOCKER_REGISTRY_PASSWORD')
    
        NOPAQUE_SERVICE_DESK = 'gitlab-ub-incoming+sfb1288inf-nopaque-1324-issue-@jura.uni-bielefeld.de'  # noqa
    
        NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI = \
            os.environ.get('NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI')
    
        NOPAQUE_LOG_DATE_FORMAT = \
            os.environ.get('NOPAQUE_LOG_DATE_FORMAT', '%Y-%m-%d %H:%M:%S')
    
        NOPAQUE_LOG_FORMAT = os.environ.get(
            'NOPAQUE_LOG_DATE_FORMAT',
            '[%(asctime)s] %(levelname)s in '
            '%(pathname)s (function: %(funcName)s, line: %(lineno)d): %(message)s'
        )
        NOPAQUE_LOG_LEVEL = os.environ.get('NOPAQUE_LOG_LEVEL', 'INFO')
    
        NOPAQUE_LOG_FILE_ENABLED = \
            os.environ.get('NOPAQUE_LOG_FILE_ENABLED', 'true').lower() == 'true'
        NOPAQUE_LOG_FILE_DIR = \
            os.environ.get('NOPAQUE_LOG_FILE_DIR', os.path.join(basedir, 'logs'))
        NOPAQUE_LOG_FILE_LEVEL = \
            os.environ.get('NOPAQUE_LOG_FILE_LEVEL', NOPAQUE_LOG_LEVEL)
        NOPAQUE_LOG_STDERR_ENABLED = \
            os.environ.get('NOPAQUE_LOG_STDERR_ENABLED', 'false').lower() == 'true'
        NOPAQUE_LOG_STDERR_LEVEL = \
            os.environ.get('NOPAQUE_LOG_STDERR_LEVEL', NOPAQUE_LOG_LEVEL)
    
    
        NOPAQUE_PROXY_FIX_X_FOR = \
            int(os.environ.get('NOPAQUE_PROXY_FIX_X_FOR', '0'))
        NOPAQUE_PROXY_FIX_X_HOST = \
            int(os.environ.get('NOPAQUE_PROXY_FIX_X_HOST', '0'))
        NOPAQUE_PROXY_FIX_X_PORT = \
            int(os.environ.get('NOPAQUE_PROXY_FIX_X_PORT', '0'))
        NOPAQUE_PROXY_FIX_X_PREFIX = \
            int(os.environ.get('NOPAQUE_PROXY_FIX_X_PREFIX', '0'))
        NOPAQUE_PROXY_FIX_X_PROTO = \
            int(os.environ.get('NOPAQUE_PROXY_FIX_X_PROTO', '0'))
    
    
        NOPAQUE_TRANSKRIBUS_ENABLED = \
            os.environ.get('NOPAQUE_TRANSKRIBUS_ENABLED', 'true').lower() == 'true'
        NOPAQUE_READCOOP_USERNAME = os.environ.get('NOPAQUE_READCOOP_USERNAME')
        NOPAQUE_READCOOP_PASSWORD = os.environ.get('NOPAQUE_READCOOP_PASSWORD')
    
    
        def init_app(cls, app: Flask):
    
            # Set up logging according to the corresponding (NOPAQUE_LOG_*)
    
            # configurations
    
            app.logger.setLevel(app.config.get('NOPAQUE_LOG_LEVEL'))
            # Remove existing handlers
    
            for handler in app.logger.handlers:
                app.logger.removeHandler(handler)
    
            formatter = logging.Formatter(
                fmt=app.config.get('NOPAQUE_LOG_FORMAT'),
                datefmt=app.config.get('NOPAQUE_LOG_DATE_FORMAT')
            )
    
            if app.config.get('NOPAQUE_LOG_STDERR_ENABLED'):
    
                stream_handler = logging.StreamHandler()
                stream_handler.setFormatter(formatter)
    
                stream_handler.setLevel(app.config.get('NOPAQUE_LOG_STDERR_LEVEL'))
    
                app.logger.addHandler(stream_handler)
    
            if app.config.get('NOPAQUE_LOG_FILE_ENABLED'):
                if not os.path.exists(app.config.get('NOPAQUE_LOG_FILE_DIR')):
                    os.mkdir(app.config.get('NOPAQUE_LOG_FILE_DIR'))
    
                rotating_file_handler = RotatingFileHandler(
    
                    os.path.join(app.config.get('NOPAQUE_LOG_FILE_DIR'), 'nopaque.log'),  # noqa
    
                    maxBytes=10240,
                    backupCount=10
                )
                rotating_file_handler.setFormatter(formatter)
    
                rotating_file_handler.setLevel(app.config.get('NOPAQUE_LOG_FILE_LEVEL'))  # noqa
    
                app.logger.addHandler(rotating_file_handler)
    
    
            # Set up and apply the ProxyFix middleware according to the
    
            # corresponding (NOPAQUE_PROXY_FIX_*) configurations
            app.wsgi_app = ProxyFix(
                app.wsgi_app,
                x_for=app.config.get('NOPAQUE_PROXY_FIX_X_FOR'),
                x_host=app.config.get('NOPAQUE_PROXY_FIX_X_HOST'),
                x_port=app.config.get('NOPAQUE_PROXY_FIX_X_PORT'),
                x_prefix=app.config.get('NOPAQUE_PROXY_FIX_X_PREFIX'),
                x_proto=app.config.get('NOPAQUE_PROXY_FIX_X_PROTO')
            )