From ac94704c9eb5e2924ec9c9492a756cdf96b50c75 Mon Sep 17 00:00:00 2001 From: klemek Date: Mon, 20 Apr 2026 23:04:18 +0200 Subject: [PATCH] fix: add X-Forwarded-Proto header --- src/handlers.py | 4 +++- tests/test_handlers.py | 36 ++++++++++++++++++++++++------------ 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/handlers.py b/src/handlers.py index 50eef44..02ccad0 100644 --- a/src/handlers.py +++ b/src/handlers.py @@ -36,6 +36,7 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler): self.out_size: int = 0 self.__host: str | None = None self.__in_size: int | None = None + self.https: bool = params.https super().__init__(*args, **kwargs) @typing.override @@ -131,9 +132,10 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler): def send_proxy(self, url: str) -> None: headers = dict(self.headers) headers["Host"] = urllib.parse.urlparse(url).netloc + headers["X-Real-IP"] = self.client_address[0] headers["X-Forwarded-Host"] = self.host headers["X-Forwarded-For"] = self.client_address[0] - headers["X-Real-IP"] = self.client_address[0] + headers["X-Forwarded-Proto"] = "https" if self.https else "http" try: body: bytes | None = None if self.in_size > 0: diff --git a/tests/test_handlers.py b/tests/test_handlers.py index 0d79e36..50aa702 100644 --- a/tests/test_handlers.py +++ b/tests/test_handlers.py @@ -756,11 +756,13 @@ class TestRequestHandler(BaseHandlerTestCase): "data": None, "headers": { "Host": "example.com", + "X-Real-IP": "127.0.0.1", "X-Forwarded-Host": "localhost", "X-Forwarded-For": "127.0.0.1", - "X-Real-IP": "127.0.0.1", + "X-Forwarded-Proto": "https", }, - "timeout": 240, + "allow_redirects": True, + "timeout": 480, }, ), self.expects_status_only(handler, 200, "OK"), @@ -796,12 +798,14 @@ class TestRequestHandler(BaseHandlerTestCase): "data": b"hello", "headers": { "Host": "example.com", + "X-Real-IP": "127.0.0.1", "X-Forwarded-Host": "localhost", "X-Forwarded-For": "127.0.0.1", - "X-Real-IP": "127.0.0.1", + "X-Forwarded-Proto": "https", "Content-Length": "5", }, - "timeout": 240, + "allow_redirects": True, + "timeout": 480, }, ), self.expects_status_only(handler, 200, "OK"), @@ -836,11 +840,13 @@ class TestRequestHandler(BaseHandlerTestCase): "data": None, "headers": { "Host": "example.com", + "X-Real-IP": "127.0.0.1", "X-Forwarded-Host": "localhost", "X-Forwarded-For": "127.0.0.1", - "X-Real-IP": "127.0.0.1", + "X-Forwarded-Proto": "https", }, - "timeout": 240, + "allow_redirects": True, + "timeout": 480, }, ), self.expects_basic_body(handler, "hello", message="OK"), @@ -867,11 +873,13 @@ class TestRequestHandler(BaseHandlerTestCase): "data": None, "headers": { "Host": "example.com", + "X-Real-IP": "127.0.0.1", "X-Forwarded-Host": "localhost", "X-Forwarded-For": "127.0.0.1", - "X-Real-IP": "127.0.0.1", + "X-Forwarded-Proto": "https", }, - "timeout": 240, + "allow_redirects": True, + "timeout": 480, }, ) as request_mock, self.expects_status_only( @@ -907,11 +915,13 @@ class TestRequestHandler(BaseHandlerTestCase): "data": None, "headers": { "Host": "example.com", + "X-Real-IP": "127.0.0.1", "X-Forwarded-Host": "localhost", "X-Forwarded-For": "127.0.0.1", - "X-Real-IP": "127.0.0.1", + "X-Forwarded-Proto": "https", }, - "timeout": 240, + "allow_redirects": True, + "timeout": 480, }, ), self.expects_status_only(handler, 200, "OK"), @@ -944,11 +954,13 @@ class TestRequestHandler(BaseHandlerTestCase): "data": None, "headers": { "Host": "example.com", + "X-Real-IP": "127.0.0.1", "X-Forwarded-Host": "host", "X-Forwarded-For": "127.0.0.1", - "X-Real-IP": "127.0.0.1", + "X-Forwarded-Proto": "https", }, - "timeout": 240, + "allow_redirects": True, + "timeout": 480, }, ), self.expects_status_only(handler, 200, "OK"),