diff --git a/.env.example b/.example.env similarity index 100% rename from .env.example rename to .example.env diff --git a/src/app.py b/src/app.py index 22e1df5..9d25d40 100644 --- a/src/app.py +++ b/src/app.py @@ -12,7 +12,7 @@ async def webhooks(repo): if request.is_json: if 'X-Hub-Signature-256' in request.headers.keys(): data = await request.data - header = request.headers['X-Hub-Signature-256'].split('=')[1] + header = request.headers['X-Hub-Signature-256'] if auth(header, data): payload = await request.get_json() parse(repo, payload) diff --git a/src/auth.py b/src/auth.py index eecc442..81efdf9 100644 --- a/src/auth.py +++ b/src/auth.py @@ -1,3 +1,4 @@ +import asyncio import hmac import hashlib import os @@ -5,10 +6,9 @@ async def auth(header, data): - token = os.environ.get("API_TOKEN") - tokenb = bytes(token, 'utf-8') - - signature = 'sha256=' + hmac.new(tokenb, data, hashlib.sha256).hexdigest() + token = os.environ.get("API_TOKEN").strip().encode('utf-8') + signature = 'sha256=' + \ + hmac.new(token, str(data).encode(), hashlib.sha256).hexdigest() if hmac.compare_digest(signature, header): return True return False @@ -18,14 +18,14 @@ async def auth(header, data): if len(sys.argv) == 3: body = sys.argv[1] header = sys.argv[2] - if auth(header, body): + if asyncio.run(auth(header, body)): print('true') else: print('false') elif len(sys.argv) == 2: body = sys.argv[0] header = sys.argv[1] - if auth(header, body): + if asyncio.run(auth(header, body)): print('true') else: print('false') diff --git a/src/parse.py b/src/parse.py index 5497bbe..b08f2af 100644 --- a/src/parse.py +++ b/src/parse.py @@ -1,6 +1,8 @@ +import asyncio from multiprocessing import Process from release import processRelease import sys +import json async def parse(repo, payload): @@ -15,8 +17,8 @@ async def parse(repo, payload): if len(sys.argv) == 3: repo = sys.argv[1] payload = sys.argv[2] - parse(repo, payload) + asyncio.run(parse(repo, json.loads(payload))) elif len(sys.argv) == 2: repo = sys.argv[0] payload = sys.argv[1] - parse(repo, payload) + asyncio.run(parse(repo, json.loads(payload))) diff --git a/src/release.py b/src/release.py index 28d07b5..463ab95 100644 --- a/src/release.py +++ b/src/release.py @@ -1,16 +1,15 @@ import json import subprocess - -from os import environ +import os from pybars import Compiler compiler = Compiler() def processRelease(repo, payload): - base_path = environ.get("SITES") + base_path = os.environ.get("SITES") file_name = repo + '.json' - file_path = (base_path / file_name).resolve() + file_path = base_path + '/' + file_name with open(file_path) as f: data = json.load(f) @@ -38,13 +37,13 @@ def processRelease(repo, payload): ['git', 'checkout', 'tags/' + payload['release']['tag_name']], cwd=data['path']) with subprocess.Popen(' && '.join(commands), cwd=data['path'], executable='/bin/bash', shell=True) as process: + print('Runing process: ' + process.pid) try: process.communicate(timeout=300) except subprocess.TimeoutExpired: print('Process was killed by timeout: 300 seconds') raise finally: - print('Process complete') process.kill() process.communicate() print('Release complete!')