1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# 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 <http://www.gnu.org/licenses/>.
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)
|