diff options
| author | Trent Callan <trentcalllan@yahoo.com> | 2022-09-18 17:20:19 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-18 17:20:19 -0700 |
| commit | 3136ad72edd0949626f48ab55103e79b540c7a94 (patch) | |
| tree | e2a20425209e3f512ac58fbb41351f6fdc367666 /backend/helpers.py | |
| parent | 3700dd7437c0c5ed28de3688ffc049bb9b92a41a (diff) | |
| download | decky-loader-3136ad72edd0949626f48ab55103e79b540c7a94.tar.gz decky-loader-3136ad72edd0949626f48ab55103e79b540c7a94.zip | |
Download Remote Binaries during Store Install (#177)v2.1.0-pre3
* Download Remote Binaries during store install.
Fix Manual Install Modal Type
* Use Unix Line endings. (Thanks WSL)
* Fix Merge Commit with main branch.
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 |
