From f5163cd4c23d0d725258ec5424543ae6e491c7b6 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sun, 1 Aug 2021 13:05:09 +1200 Subject: [PATCH] Move to app folder --- src/main.py | 61 ------------------------------------------ src/pack.py | 76 ----------------------------------------------------- 2 files changed, 137 deletions(-) delete mode 100755 src/main.py delete mode 100755 src/pack.py diff --git a/src/main.py b/src/main.py deleted file mode 100755 index b8ef90b..0000000 --- a/src/main.py +++ /dev/null @@ -1,61 +0,0 @@ -from aiohttp import web -import os -import hmac -from pack import Pack - -class App: - def __init__(self): - self.pack = Pack() - print("Done") - self.app = web.Application() - self.app.add_routes([web.post('/update', self.updatePack)]) - self.app.router.add_static('/files', "./files") - print("Started") - web.run_app(self.app) - - async def updatePack(self, request): - try: - json = await request.json() - text = await request.read() - except: - return web.Response(status=500, text="Invalid json or text") - - header_signature = request.headers.get('X-Hub-Signature') - print("Hook recieved") - if "ref" in json and json["ref"] == 'refs/heads/release': - if (status := self.verify_signature(text, header_signature)) == 200: - self.pack.pull() - self.pack.collate() - self.pack.compress() - self.pack.hash() - self.pack.upload() - else: - status = 404 - print(status) - return web.Response(status=status) - - def verify_signature(self, request_data, header_signature): - # do not store your secret key in your code, pull from environment variable - secret_key = os.environ.get('WEBHOOK_SECRET') - - if not header_signature: - return 404 - - # separate the signature from the sha1 indication - sha_name, signature = header_signature.split('=') - if sha_name != 'sha1': - return 501 - - # create a new hmac with the secret key and the request data - mac = hmac.new(secret_key.encode(), msg=request_data, digestmod='sha1') - - # verify the digest matches the signature - if not hmac.compare_digest(mac.hexdigest(), signature): - return 404 - return 200 - -if __name__ == '__main__': - app = App() - - - diff --git a/src/pack.py b/src/pack.py deleted file mode 100755 index 2eeadd3..0000000 --- a/src/pack.py +++ /dev/null @@ -1,76 +0,0 @@ -import os -import re -import shutil -from shutil import make_archive -import hashlib -from b2sdk.v1 import InMemoryAccountInfo -from b2sdk.v1 import B2Api - -class Pack: - def __init__(self): - command = "git clone -b {branch} --single-branch {url} /files/resourcepack" \ - .format(branch=os.environ.get("BRANCH"), url=os.environ.get("RESOURCE_PACK_URL")) - print(command) - status = os.system(command) - print(status) - - info = InMemoryAccountInfo() # store credentials, tokens and cache in memory - self.b2_api = B2Api(info) - self.b2_api.authorize_account("production", os.environ.get("B2_ID"), - os.environ.get("B2_KEY")) - self.bucket = self.b2_api.get_bucket_by_name(os.environ.get("BUCKET")) - - def __del__(self): - shutil.rmtree("/files/resourcepack") - - def pull(self) -> None: - os.system("git -C /files/resourcepack pull origin {}".format(os.environ.get("BRANCH"))) - - def collate(self) -> None: - if os.path.exists("/files/pack"): - shutil.rmtree("/files/pack") - os.mkdir("/files/pack") - shutil.copytree("/files/resourcepack/assets", "/files/pack/assets") - shutil.copy("/files/resourcepack/pack.mcmeta", "/files/pack/pack.mcmeta") - shutil.copy("/files/resourcepack/pack.png", "/files/pack/pack.png") - - - def compress(self) -> None: - shutil.make_archive("/files/pack", 'zip', "/files/pack") - shutil.rmtree("/files/pack") - - def hash(self): - sha1sum = hashlib.sha1() - with open("/files/pack.zip", "rb") as pack: - block = pack.read(2**16) - while len(block) != 0: - sha1sum.update(block) - block = pack.read(2**16) - self.hash = sha1sum.hexdigest() - with open("/files/hash", 'w') as hashfile: - hashfile.write(self.hash) - - def upload(self): - self.b2_api.authorize_account("production", os.environ.get("B2_ID"), - os.environ.get("B2_KEY")) - self.bucket.upload_local_file( - local_file="files/pack.zip", - file_name="pack.zip") - - self.bucket.upload_local_file( - local_file="/files/hash", - file_name="hash") - - - - - -if __name__ == "__main__": - print("Pack") - pack = Pack() - # pack.pull() - # pack.collate() - # pack.compress() - # pack.hash() - # pack.upload() - #pack = None \ No newline at end of file