diff options
Diffstat (limited to 'backend/helpers.py')
| -rw-r--r-- | backend/helpers.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/backend/helpers.py b/backend/helpers.py index 3a109dca..0b6e7746 100644 --- a/backend/helpers.py +++ b/backend/helpers.py @@ -2,11 +2,15 @@ import re import ssl import subprocess import uuid +import os from subprocess import check_output from time import sleep +from hashlib import sha256 +from io import BytesIO import certifi from aiohttp.web import Response, middleware +from aiohttp import ClientSession REMOTE_DEBUGGER_UNIT = "steam-web-debug-portforward.service" @@ -83,6 +87,30 @@ def get_homebrew_path(home_path = None) -> str: return str(home_path+"/homebrew") # return str(home_path+"/homebrew") +# Download Remote Binaries to local Plugin +async def download_remote_binary_to_path(url, binHash, path) -> bool: + rv = False + try: + if os.access(os.path.dirname(path), os.W_OK): + async with ClientSession() as client: + res = await client.get(url, ssl=get_ssl_context()) + if res.status == 200: + data = BytesIO(await res.read()) + remoteHash = sha256(data.getbuffer()).hexdigest() + if binHash == remoteHash: + data.seek(0) + with open(path, 'wb') as f: + f.write(data.getbuffer()) + rv = True + else: + raise Exception(f"Fatal Error: Hash Mismatch for remote binary {path}@{url}") + else: + rv = False + except: + rv = False + + return rv + async def is_systemd_unit_active(unit_name: str) -> bool: res = subprocess.run(["systemctl", "is-active", unit_name], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) return res.returncode == 0 |
