Aggiunto un log migliore

This commit is contained in:
2026-07-01 15:40:27 +02:00
parent dde33c434d
commit b4d9907d53
2 changed files with 56 additions and 2 deletions

View File

@@ -13,6 +13,7 @@ import socket
import threading import threading
import time import time
from typing import Any, Dict, Iterable, Optional from typing import Any, Dict, Iterable, Optional
from urllib.parse import urlsplit
import docker import docker
@@ -274,7 +275,14 @@ def extract_user_from_http_request(data: bytes, known_users: Dict[str, Dict[str,
if candidate in known_users and candidate not in {"localhost", "127", "0"}: if candidate in known_users and candidate not in {"localhost", "127", "0"}:
return known_users[candidate], data, None return known_users[candidate], data, None
parsed_target = urlsplit(target)
if parsed_target.scheme and parsed_target.netloc:
path = parsed_target.path or "/"
query = parsed_target.query
separator = "?" if query else ""
else:
path, separator, query = target.partition("?") path, separator, query = target.partition("?")
segments = [segment for segment in path.split("/") if segment] segments = [segment for segment in path.split("/") if segment]
if segments: if segments:
candidate = segments[0] candidate = segments[0]
@@ -530,7 +538,7 @@ async def main():
log( log(
"Shared gateway ready: " "Shared gateway ready: "
f"{format_access_url('localhost', GATEWAY_PORT)} " f"{format_access_url('localhost', GATEWAY_PORT)} "
"(host-based routing: http://<user>.localhost:{GATEWAY_PORT})" f"(host-based routing: http://<user>.localhost:{GATEWAY_PORT})"
) )
servers.append(gateway_server) servers.append(gateway_server)

View File

@@ -221,6 +221,52 @@ class ManagerConfigTests(unittest.TestCase):
) )
self.assertIsNone(redirect_target) self.assertIsNone(redirect_target)
def test_extract_user_from_bare_user_path_rewrites_to_root(self):
request = (
b"GET /user1 HTTP/1.1\r\n"
b"Host: 10.200.200.113:8080\r\n"
b"Connection: keep-alive\r\n"
b"\r\n"
)
users = {"user1": {"id": "user1"}}
user, rewritten, redirect_target = self.manager.extract_user_from_http_request(request, users)
self.assertEqual(user["id"], "user1")
self.assertEqual(
rewritten,
(
b"GET / HTTP/1.1\r\n"
b"Host: 10.200.200.113:8080\r\n"
b"Connection: keep-alive\r\n"
b"\r\n"
),
)
self.assertIsNone(redirect_target)
def test_extract_user_from_absolute_form_request_rewrites_to_root(self):
request = (
b"GET http://10.200.200.113:8080/user1 HTTP/1.1\r\n"
b"Host: 10.200.200.113:8080\r\n"
b"Connection: keep-alive\r\n"
b"\r\n"
)
users = {"user1": {"id": "user1"}}
user, rewritten, redirect_target = self.manager.extract_user_from_http_request(request, users)
self.assertEqual(user["id"], "user1")
self.assertEqual(
rewritten,
(
b"GET / HTTP/1.1\r\n"
b"Host: 10.200.200.113:8080\r\n"
b"Connection: keep-alive\r\n"
b"\r\n"
),
)
self.assertIsNone(redirect_target)
def test_wait_until_ready_applies_stabilization_delay(self): def test_wait_until_ready_applies_stabilization_delay(self):
sleep_calls = [] sleep_calls = []
clock = {"now": 0.0} clock = {"now": 0.0}