diff --git a/.env.sample b/.env.sample index df0d582..ed47f11 100644 --- a/.env.sample +++ b/.env.sample @@ -1,2 +1,7 @@ RESOURCE_PACK_URL= -GITHUB_WEBHOOK_SECRET= \ No newline at end of file +WEBHOOK_SECRET= +BRANCH= +BUCKET= +B2_ID= +B2_KEY= +GIT_SSH_COMMAND= \ No newline at end of file diff --git a/src/main.py b/src/main.py old mode 100644 new mode 100755 index bee3e49..4eba54c --- a/src/main.py +++ b/src/main.py @@ -1,20 +1,25 @@ from aiohttp import web import os import hmac -import pack +from pack import Pack class App: def __init__(self): - self.pack = pack.Pack() + #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): - json = await request.json() - text = await request.read() + 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': @@ -23,12 +28,15 @@ class App: self.pack.collate() self.pack.compress() self.pack.hash() - print(status) - return web.Response(status=200) + 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('GITHUB_WEBHOOK_SECRET') + secret_key = os.environ.get('WEBHOOK_SECRET') if not header_signature: return 404 @@ -47,7 +55,7 @@ class App: return 200 if __name__ == '__main__': - app = App() + app = App() diff --git a/src/pack.py b/src/pack.py old mode 100644 new mode 100755 index cc09bb0..2eeadd3 --- a/src/pack.py +++ b/src/pack.py @@ -1,77 +1,76 @@ import os import re import shutil -import zipfile +from shutil import make_archive import hashlib -from dotenv import load_dotenv from b2sdk.v1 import InMemoryAccountInfo from b2sdk.v1 import B2Api class Pack: def __init__(self): - load_dotenv() - self.repourl = os.environ.get("RESOURCE_PACK_URL") - command = "git clone " + self.repourl + " resourcepack" + 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 - b2_api = B2Api(info) - b2_api.authorize_account("production", os.environ.get("APPLICATION_KEY_ID"), - os.environ.get("APPLICATION_KEY")) - self.bucket = b2_api.get_bucket_by_name(os.environ.get("BUCKET")) + 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(self.dir) + shutil.rmtree("/files/resourcepack") def pull(self) -> None: - os.system("git -C {} pull origin master".format(self.dir)) + os.system("git -C /files/resourcepack pull origin {}".format(os.environ.get("BRANCH"))) def collate(self) -> None: - if os.path.exists("pack"): - shutil.rmtree("pack") - os.mkdir("pack") - shutil.copytree("resourcepack/assets", "pack/assets") - shutil.copy("resourcepack/pack.mcmeta", "pack/pack.mcmeta") - shutil.copy("resourcepack/pack.png", "pack/pack.png") + 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: - if not os.path.exists("files"): - os.mkdir("files") - os.system("zip -r files/pack.zip pack") - shutil.rmtree("pack") + 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: + 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: + with open("/files/hash", 'w') as hashfile: hashfile.write(self.hash) def upload(self): - bucket.upload_local_file( + 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") - bucket.upload_local_file( - local_file="files/hash", + self.bucket.upload_local_file( + local_file="/files/hash", file_name="hash") -if __name__ == "__main__": - from dotenv import load_dotenv - load_dotenv() - pack = Pack() - pack.pull() - pack.collate() - pack.compress() - pack.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