Initialer Commit
commit
b2441c50b4
Binary file not shown.
|
|
@ -0,0 +1,2 @@
|
|||
Flask==0.12.2
|
||||
toml==0.9.4
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
import json
|
||||
import os
|
||||
import shlex
|
||||
|
||||
from subprocess import Popen
|
||||
|
||||
import toml
|
||||
from flask import Flask, request, abort
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
SETTINGS_FILE = "settings.toml"
|
||||
|
||||
config = {}
|
||||
|
||||
if os.path.exists(SETTINGS_FILE):
|
||||
config = toml.loads(open(SETTINGS_FILE, "r").read())
|
||||
|
||||
def json_path(obj, path):
|
||||
if not type(obj) in [dict, list]:
|
||||
return None
|
||||
if "." not in path:
|
||||
return None if path not in obj else obj[path]
|
||||
key = path.split(".")
|
||||
if key[0] not in obj:
|
||||
return None
|
||||
return json_path(obj[key[0]], ".".join(key[1:]))
|
||||
|
||||
def process(target):
|
||||
app.logger.error("PROCESSING: "+str(target))
|
||||
Popen(shlex.split(target["exec"]), cwd=target["path"])
|
||||
app.logger.error("POST-processing :P")
|
||||
return "True", 200
|
||||
|
||||
@app.route("/", methods=['GET','POST'])
|
||||
def index():
|
||||
content = request.data.decode("utf8")
|
||||
try:
|
||||
data = json.loads(content)
|
||||
#app.logger.error(json.dumps(data, indent=1))
|
||||
except Exception as e:
|
||||
app.logger.exception(e)
|
||||
return "False", 400
|
||||
#app.logger.error(request.headers)
|
||||
for source in config:
|
||||
source = config[source]
|
||||
if not "targets" in source:
|
||||
continue
|
||||
for target in source["targets"]:
|
||||
target_name = target
|
||||
target = source["targets"][target]
|
||||
requested_name = json_path(data, source["name_path"])
|
||||
if not requested_name:
|
||||
continue
|
||||
app.logger.error(str(target_name) + str(requested_name))
|
||||
if requested_name == target_name:
|
||||
if "token" in target:
|
||||
if not source["tokenHeader"] in request.headers:
|
||||
return "False", 403
|
||||
if not request.headers[source["tokenHeader"]] == target["token"]:
|
||||
return "False", 403
|
||||
return process(target)
|
||||
return "False", 404
|
||||
|
||||
app.run("0.0.0.0",8000)
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
[gitlab]
|
||||
name_path = "project.path_with_namespace"
|
||||
tokenHeader = "X-Gitlab-Token"
|
||||
|
||||
[gogs]
|
||||
name_path = "repository.name"
|
||||
tokenHeader = ""
|
||||
|
||||
[gitlab.targets."cklug/test"]
|
||||
path = "/tmp/cd-target"
|
||||
exec = "bash update.sh"
|
||||
token = "fooBar"
|
||||
|
||||
Loading…
Reference in New Issue