renalreg/radar

View on GitHub
radar/config.py

Summary

Maintainability
A
25 mins
Test Coverage
import string

from flask import current_app
from werkzeug.local import LocalProxy

from radar.utils import random_string


config = LocalProxy(lambda: get_config())


def get_config():
    return current_app.config


class ConfigError(Exception):
    pass


def check_config(config):
    debug = config.setdefault('DEBUG', False)
    testing = config.setdefault('TESTING', False)

    if config.get('SECRET_KEY') is None:
        config['SECRET_KEY'] = random_string(string.ascii_letters + string.digits, 64)

    if config.get('SQLALCHEMY_DATABASE_URI') is None:
        raise ConfigError('Missing SQLALCHEMY_DATABASE_URI')

    config.setdefault('SQLALCHEMY_TRACK_MODIFICATIONS', False)

    base_url = config.setdefault('BASE_URL', 'http://localhost:8080/#')

    if base_url.endswith('/'):
        raise ConfigError('BASE_URL should not have a trailing slash')

    config.setdefault('READ_ONLY', False)

    config.setdefault('SESSION_TIMEOUT', 1800)  # 30 mins

    config.setdefault('PASSWORD_ALPHABET', string.ascii_lowercase + string.digits)
    config.setdefault('PASSWORD_LENGTH', 10)
    config.setdefault('PASSWORD_RESET_MAX_AGE', 86400)  # 1 day
    config.setdefault('PASSWORD_MIN_SCORE', 3)

    # Password hashing method to use
    # 50000 iterations
    # Note: updating this will cause passwords to be re-hashed when the user next logs in
    config.setdefault('PASSWORD_HASH_METHOD', 'pbkdf2:sha1:50000')

    config.setdefault('EMAIL_ENABLED', not (debug or testing))
    config.setdefault('EMAIL_FROM_ADDRESS', 'RaDaR <radar@radar.nhs.uk>')  # TODO MX record
    config.setdefault('EMAIL_SMTP_HOST', 'localhost')
    config.setdefault('EMAIL_SMTP_PORT', 25)

    config.setdefault('UKRDC_SEARCH_ENABLED', False)

    if config['UKRDC_SEARCH_ENABLED'] and config.get('UKRDC_SEARCH_URL') is None:
        raise ConfigError('Missing UKRDC_SEARCH_URL')