Aggiunto un log migliore
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
Reference in New Issue
Block a user