From fdfdef5837f544ad291ff303a3900981bb268d2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Thu, 26 Sep 2024 21:08:48 +0200 Subject: [PATCH] gets X-Forwarded-Prefix from requests and adds it to index.html --- src/pydase/server/web_server/web_server.py | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/pydase/server/web_server/web_server.py b/src/pydase/server/web_server/web_server.py index c611ada..1f9ba8e 100644 --- a/src/pydase/server/web_server/web_server.py +++ b/src/pydase/server/web_server/web_server.py @@ -6,6 +6,7 @@ from typing import Any import aiohttp.web import aiohttp_middlewares.cors +import anyio from pydase.config import ServiceConfig, WebServerConfig from pydase.data_service.data_service_observer import DataServiceObserver @@ -99,7 +100,32 @@ class WebServer: self._loop = asyncio.get_running_loop() self._sio = setup_sio_server(self.observer, self.enable_cors, self._loop) - async def index(request: aiohttp.web.Request) -> aiohttp.web.FileResponse: + async def index( + request: aiohttp.web.Request, + ) -> aiohttp.web.Response | aiohttp.web.FileResponse: + # Read the X-Forwarded-Prefix header from the request + forwarded_prefix = request.headers.get("X-Forwarded-Prefix", "") + + if forwarded_prefix != "": + # Read the index.html file + index_file_path = self.frontend_src / "index.html" + + async with await anyio.open_file(index_file_path) as f: + html_content = await f.read() + + # Inject the forwarded prefix into the HTML + modified_html = html_content.replace( + 'window.__FORWARDED_PREFIX__ = "";', + f'window.__FORWARDED_PREFIX__ = "{forwarded_prefix}";', + ) + modified_html = modified_html.replace( + "/assets/", + f"{forwarded_prefix}/assets/", + ) + + return aiohttp.web.Response( + text=modified_html, content_type="text/html" + ) return aiohttp.web.FileResponse(self.frontend_src / "index.html") app = aiohttp.web.Application()