Преглед изворни кода

adhere forwarded-prefix for redirects

Rodja Trappe пре 1 година
родитељ
комит
1d36186757
2 измењених фајлова са 13 додато и 0 уклоњено
  1. 11 0
      nicegui/middlewares.py
  2. 2 0
      nicegui/nicegui.py

+ 11 - 0
nicegui/middlewares.py

@@ -0,0 +1,11 @@
+from starlette.middleware.base import BaseHTTPMiddleware
+
+
+class RedirectWithPrefixMiddleware(BaseHTTPMiddleware):
+    async def dispatch(self, request, call_next):
+        prefix = request.headers.get('X-Forwarded-Prefix', '')
+        response = await call_next(request)
+        if 'Location' in response.headers:
+            new_location = prefix + response.headers['Location']
+            response.headers['Location'] = new_location
+        return response

+ 2 - 0
nicegui/nicegui.py

@@ -22,6 +22,7 @@ from .element import Element
 from .error import error_content
 from .helpers import is_file, safe_invoke
 from .page import page
+from .middlewares import RedirectWithPrefixMiddleware
 
 globals.app = app = App(default_response_class=NiceGUIJSONResponse)
 # NOTE we use custom json module which wraps orjson
@@ -29,6 +30,7 @@ socket_manager = SocketManager(app=app, mount_location='/_nicegui_ws/', json=jso
 globals.sio = sio = socket_manager._sio  # pylint: disable=protected-access
 
 app.add_middleware(GZipMiddleware)
+app.add_middleware(RedirectWithPrefixMiddleware)
 static_files = StaticFiles(
     directory=(Path(__file__).parent / 'static').resolve(),
     follow_symlink=True,