summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorynhhoJ <22500212+ynhhoJ@users.noreply.github.com>2025-05-30 03:30:48 +0300
committerGitHub <noreply@github.com>2025-05-29 17:30:48 -0700
commite4f7546f99e315f4f76d8bcaff2610f34098e43a (patch)
treea9d9b3ad8a69a4407a601b846c402306c1675e6f /backend
parent4e5468a3538d80fe65ae3958abbcb452b5348945 (diff)
downloaddecky-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`
Diffstat (limited to 'backend')
-rw-r--r--backend/decky_loader/helpers.py2
-rw-r--r--backend/decky_loader/loader.py11
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))