# Copyright (C) 2017-2018 Lars Wirzenius # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import os import apifw import slog import yaml import qvisqve DEFAULT_CONFIG_FILE = '/dev/null' def dict_logger(log, stack_info=None): qvisqve.log.log(exc_info=stack_info, **log) def read_config(filename): with open(filename) as f: return yaml.safe_load(f) def check_config(cfg): for key in cfg: if cfg[key] is None: raise Exception('Configuration %s should not be None' % key) _counter = slog.Counter() def counter(): new_context = 'HTTP transaction {}'.format(_counter.increment()) qvisqve.log.set_context(new_context) default_config = { 'log': [], 'token-issuer': None, 'token-public-key': None, 'token-private-key': None, 'token-lifetime': None, 'store': None, } def create_app(): config_filename = os.environ.get('QVISQVE_CONFIG', DEFAULT_CONFIG_FILE) actual_config = read_config(config_filename) config = dict(default_config) config.update(actual_config or {}) if 'token-audience' not in config: config['token-audience'] = config.get('token-issuer') check_config(config) qvisqve.setup_logging(config) qvisqve.log.log('info', msg_text='Qvisqve starting') api = qvisqve.API(config) return apifw.create_bottle_application(api, counter, dict_logger, config)