diff options
| author | ynhhoJ <22500212+ynhhoJ@users.noreply.github.com> | 2025-05-30 03:30:48 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-29 17:30:48 -0700 |
| commit | e4f7546f99e315f4f76d8bcaff2610f34098e43a (patch) | |
| tree | a9d9b3ad8a69a4407a601b846c402306c1675e6f | |
| parent | 4e5468a3538d80fe65ae3958abbcb452b5348945 (diff) | |
| download | decky-loader-e4f7546f99e315f4f76d8bcaff2610f34098e43a.tar.gz decky-loader-e4f7546f99e315f4f76d8bcaff2610f34098e43a.zip | |
Add support of files from `data/<plugin>/` to be fetched from Front-End (#761)
* Add support of files from `data/<plugin>/assets/` to be fetched from Front-End
* Add `data` regex folder into `csrf_middleware`
| -rw-r--r-- | backend/decky_loader/helpers.py | 2 | ||||
| -rw-r--r-- | backend/decky_loader/loader.py | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/backend/decky_loader/helpers.py b/backend/decky_loader/helpers.py index c5c3cd9a..857503ab 100644 --- a/backend/decky_loader/helpers.py +++ b/backend/decky_loader/helpers.py @@ -23,6 +23,7 @@ csrf_token = str(uuid.uuid4()) ssl_ctx = ssl.create_default_context(cafile=certifi.where()) assets_regex = re.compile("^/plugins/.*/assets/.*") +data_regex = re.compile("^/plugins/.*/data/.*") dist_regex = re.compile("^/plugins/.*/dist/.*") frontend_regex = re.compile("^/frontend/.*") logger = getLogger("Main") @@ -45,6 +46,7 @@ async def csrf_middleware(request: Request, handler: Handler): str(request.rel_url.path) == "/fetch" or \ str(request.rel_url.path) == "/ws" or \ assets_regex.match(str(request.rel_url)) or \ + data_regex.match(str(request.rel_url)) or \ dist_regex.match(str(request.rel_url)) or \ frontend_regex.match(str(request.rel_url)): diff --git a/backend/decky_loader/loader.py b/backend/decky_loader/loader.py index 6a324e23..e2e619f7 100644 --- a/backend/decky_loader/loader.py +++ b/backend/decky_loader/loader.py @@ -8,6 +8,7 @@ from typing import Any, Tuple, Dict, cast from aiohttp import web from os.path import exists +from decky_loader.helpers import get_homebrew_path from watchdog.events import RegexMatchingEventHandler, FileSystemEvent from watchdog.observers import Observer @@ -91,6 +92,7 @@ class Loader: web.get("/plugins/{plugin_name}/frontend_bundle", self.handle_frontend_bundle), web.get("/plugins/{plugin_name}/dist/{path:.*}", self.handle_plugin_dist), web.get("/plugins/{plugin_name}/assets/{path:.*}", self.handle_plugin_frontend_assets), + web.get("/plugins/{plugin_name}/data/{path:.*}", self.handle_plugin_frontend_assets_from_data), ]) server_instance.ws.add_route("loader/get_plugins", self.get_plugins) @@ -142,6 +144,13 @@ class Loader: return web.FileResponse(file, headers={"Cache-Control": "no-cache"}) + async def handle_plugin_frontend_assets_from_data(self, request: web.Request): + plugin = self.plugins[request.match_info["plugin_name"]] + home = get_homebrew_path() + file = path.join(home, "data", plugin.plugin_directory, request.match_info["path"]) + + return web.FileResponse(file, headers={"Cache-Control": "no-cache"}) + async def handle_frontend_bundle(self, request: web.Request): plugin = self.plugins[request.match_info["plugin_name"]] @@ -216,4 +225,4 @@ class Loader: async def handle_plugin_backend_reload(self, plugin_name: str): plugin = self.plugins[plugin_name] - await self.reload_queue.put((plugin.file, plugin.plugin_directory))
\ No newline at end of file + await self.reload_queue.put((plugin.file, plugin.plugin_directory)) |
