diff --git a/babybuddy/middleware.py b/babybuddy/middleware.py index 7e988e70..c52e2ca2 100644 --- a/babybuddy/middleware.py +++ b/babybuddy/middleware.py @@ -98,9 +98,9 @@ class HomeAssistant: def __call__(self, request: HttpRequest): def wrap_x_ingress_path(org_func): - if request.headers.get("HTTP_X_HASS_SOURCE") != "core.ingress": + if not request.is_homeassistant_ingress_request: return org_func - x_ingress_path = request.headers.get("HTTP_X_INGRESS_PATH") + x_ingress_path = request.headers.get("X-Ingress-Path") if x_ingress_path is None: return org_func @@ -115,6 +115,10 @@ class HomeAssistant: return url return wrapper + request.is_homeassistant_ingress_request = ( + request.headers.get("X-Hass-Source") == "core.ingress" + ) + if self.use_x_ingress_path_rewrite: request.build_absolute_uri = wrap_x_ingress_path( request.build_absolute_uri diff --git a/babybuddy/templates/babybuddy/login_qr_code.txt b/babybuddy/templates/babybuddy/login_qr_code.txt index fb63d885..6854dfb7 100644 --- a/babybuddy/templates/babybuddy/login_qr_code.txt +++ b/babybuddy/templates/babybuddy/login_qr_code.txt @@ -1,4 +1,4 @@ {% load i18n widget_tweaks babybuddy qr_code %} {% url 'babybuddy:root-router' as relative_root_url %} {% make_absolute_url relative_root_url as absolute_root_url %} -BABYBUDDY-LOGIN:{"url":"{{ absolute_root_url }}","api_key":"{{ user.settings.api_key }}"} \ No newline at end of file +BABYBUDDY-LOGIN:{"url":"{{ absolute_root_url }}","api_key":"{{ user.settings.api_key }}","session-cookie":"{{ session_cookie }}"} \ No newline at end of file diff --git a/babybuddy/views.py b/babybuddy/views.py index 4d2b85c6..4317acab 100644 --- a/babybuddy/views.py +++ b/babybuddy/views.py @@ -251,7 +251,18 @@ class UserAddDevice(LoginRequiredMixin, View): qr_code_template = "babybuddy/login_qr_code.txt" def get(self, request): - qr_code_response = render(request, self.qr_code_template) + session_cookie = "" + if request.is_homeassistant_ingress_request: + session_cookie = request.headers.get("Cookie", "") + + qr_code_response = render( + request, + self.qr_code_template, + { + "session_cookie": session_cookie, + } + + ) qr_code_data = qr_code_response.content.decode().strip() return render(