mirror of
https://github.com/home-assistant/core.git
synced 2025-07-28 07:37:34 +00:00
Allow multiple set-cookie headers with hassio ingress (#148148)
This commit is contained in:
parent
9ce03c79f0
commit
f478812568
@ -239,13 +239,13 @@ def _forwarded_for_header(forward_for: str | None, peer_name: str) -> str:
|
||||
return f"{forward_for}, {connected_ip!s}" if forward_for else f"{connected_ip!s}"
|
||||
|
||||
|
||||
def _init_header(request: web.Request, token: str) -> CIMultiDict | dict[str, str]:
|
||||
def _init_header(request: web.Request, token: str) -> CIMultiDict:
|
||||
"""Create initial header."""
|
||||
headers = {
|
||||
name: value
|
||||
headers = CIMultiDict(
|
||||
(name, value)
|
||||
for name, value in request.headers.items()
|
||||
if name not in INIT_HEADERS_FILTER
|
||||
}
|
||||
)
|
||||
# Ingress information
|
||||
headers[X_HASS_SOURCE] = "core.ingress"
|
||||
headers[X_INGRESS_PATH] = f"/api/hassio_ingress/{token}"
|
||||
@ -273,13 +273,13 @@ def _init_header(request: web.Request, token: str) -> CIMultiDict | dict[str, st
|
||||
return headers
|
||||
|
||||
|
||||
def _response_header(response: aiohttp.ClientResponse) -> dict[str, str]:
|
||||
def _response_header(response: aiohttp.ClientResponse) -> CIMultiDict:
|
||||
"""Create response header."""
|
||||
return {
|
||||
name: value
|
||||
return CIMultiDict(
|
||||
(name, value)
|
||||
for name, value in response.headers.items()
|
||||
if name not in RESPONSE_HEADERS_FILTER
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def _is_websocket(request: web.Request) -> bool:
|
||||
|
@ -4,6 +4,7 @@ from http import HTTPStatus
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from aiohttp.hdrs import X_FORWARDED_FOR, X_FORWARDED_HOST, X_FORWARDED_PROTO
|
||||
from multidict import CIMultiDict
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.hassio.const import X_AUTH_TOKEN
|
||||
@ -28,15 +29,22 @@ async def test_ingress_request_get(
|
||||
aioclient_mock.get(
|
||||
f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}",
|
||||
text="test",
|
||||
headers=CIMultiDict(
|
||||
[("Set-Cookie", "cookie1=value1"), ("Set-Cookie", "cookie2=value2")]
|
||||
),
|
||||
)
|
||||
|
||||
resp = await hassio_noauth_client.get(
|
||||
f"/api/hassio_ingress/{build_type[0]}/{build_type[1]}",
|
||||
headers={"X-Test-Header": "beer"},
|
||||
headers=CIMultiDict(
|
||||
[("X-Test-Header", "beer"), ("X-Test-Header", "more beer")]
|
||||
),
|
||||
)
|
||||
|
||||
# Check we got right response
|
||||
assert resp.status == HTTPStatus.OK
|
||||
assert resp.headers["Set-Cookie"] == "cookie1=value1"
|
||||
assert resp.headers.getall("Set-Cookie") == ["cookie1=value1", "cookie2=value2"]
|
||||
body = await resp.text()
|
||||
assert body == "test"
|
||||
|
||||
@ -49,6 +57,10 @@ async def test_ingress_request_get(
|
||||
== f"/api/hassio_ingress/{build_type[0]}"
|
||||
)
|
||||
assert aioclient_mock.mock_calls[-1][3]["X-Test-Header"] == "beer"
|
||||
assert aioclient_mock.mock_calls[-1][3].getall("X-Test-Header") == [
|
||||
"beer",
|
||||
"more beer",
|
||||
]
|
||||
assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_FOR]
|
||||
assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_HOST]
|
||||
assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO]
|
||||
|
Loading…
x
Reference in New Issue
Block a user