summaryrefslogtreecommitdiffstats
path: root/runner.py
diff options
context:
space:
mode:
authorJan Tuomi <jan.tuomi@eficode.com>2018-12-18 19:36:29 +0200
committerJan Tuomi <jan.tuomi@eficode.com>2018-12-18 19:36:29 +0200
commit39a842833aa87cd4f2c497127293720cb6a5222d (patch)
treef8086a0387780a35c8d0d9b5229f4c735c5984ca /runner.py
parent2cdf86d8c613b1cd27449c09ef1063f29c98d6d0 (diff)
Restructure directory
Diffstat (limited to 'runner.py')
-rw-r--r--runner.py78
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!"