#!/usr/bin/python3 # Copyright (C) 2017 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 Crypto.PublicKey.RSA import slog import yaml import ick2 transactions = slog.Counter() def counter(): return 'HTTP transaction {}'.format(transactions.increment()) def dict_logger(log, stack_info=None): ick2.log.log(exc_info=stack_info, **log) default_config = { 'token-public-key': None, 'token-audience': None, 'token-issuer': None, 'log': [], 'statedir': None, } def load_config(filename, default_config): config = yaml.safe_load(open(filename, 'r')) actual_config = dict(default_config) actual_config.update(config) return actual_config config_filename = os.environ.get('ICK_CONTROLLER_CONFIG') if not config_filename: raise Exception('No ICK_CONTROLLER_CONFIG defined in environment') config = load_config(config_filename, default_config) ick2.setup_logging(config) ick2.log.log('info', msg_text='Ick2 controller starts', config=config) api = ick2.ControllerAPI() api.set_state_directory(config['statedir']) api.load_projects() app = apifw.create_bottle_application(api, counter, dict_logger, config) # If we are running this program directly with Python, and not via # gunicorn, we can use the Bottle built-in debug server, which can # make some things easier to debug. if __name__ == '__main__': print('running in debug mode') app.run(host='127.0.0.1', port=12765)