diff options
| author | Jan Tuomi <jan.tuomi@eficode.com> | 2018-12-18 19:36:29 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan.tuomi@eficode.com> | 2018-12-18 19:36:29 +0200 |
| commit | 39a842833aa87cd4f2c497127293720cb6a5222d (patch) | |
| tree | f8086a0387780a35c8d0d9b5229f4c735c5984ca /runner.py | |
| parent | 2cdf86d8c613b1cd27449c09ef1063f29c98d6d0 (diff) | |
Restructure directory
Diffstat (limited to 'runner.py')
| -rw-r--r-- | runner.py | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/runner.py b/runner.py deleted file mode 100644 index c550555..0000000 --- a/runner.py +++ /dev/null @@ -1,78 +0,0 @@ -import os -import sys -import subprocess -import time -from flask import Flask, Response, request, jsonify -app = Flask(__name__) - -import logging -logging.basicConfig(format='%(asctime)s %(levelname)s - %(message)s', level=logging.INFO) - -from yaml import load, dump -if "CONFIG_PATH" in os.environ: - filename = os.environ["CONFIG_PATH"] -else: - filename = "config.yaml" - -try: - with open(filename) as f: - text = f.read() - config = load(text) -except: - print("Could not open file {}".format(filename)) - sys.exit(1) - -config_keys = config.keys() - -@app.route("/<key>", methods=["POST"]) -def key(key): - logging.info("User requested route \"{}\"".format(key)) - if not key in config_keys: - logging.warning("Route \"{}\" does not exist!".format(key)) - return Response("", status=404) - - options = config[key] - auth_header = request.headers.get('Authorization') - protocol = request.url.split("://")[0] - logging.info("User uses protocol {}".format(protocol)) - #if protocol != "https": - # return Response("HTTP requests not allowed! Use HTTPS!", status=400) - - auth = options["auth"] - if auth != auth_header: - logging.warning("User request rejected due to incorrect Authorization header!") - return Response("", status=401) - - if request.content_type != "application/json": - logging.warning("User request rejected due to incorrect content type (must be application/json)!") - return Response("", status=401) - - content = request.json - - cmd = options["command"] - for content_key in content: - cmd = cmd.replace("${" + str(content_key) + "}", content[content_key]) - - logging.info("User runs command:") - logging.info(cmd) - - start = time.time() - output = subprocess.check_output(cmd, shell=True) - end = time.time() - - output = output.decode("utf-8") if type(output) == bytes else output - duration = "{:.2f}".format(end - start) - - logging.info("Command output:") - logging.info(output) - logging.info("Command duration: {}".format(duration)) - - return jsonify({ - "command": cmd, - "output": str(output), - "duration": duration - }) - -@app.route("/") -def hello(): - return "Welcome to remote HTTPS runner API!" |
