From dbf2e48546633c46c23231dcfa1880ce84b9aaed Mon Sep 17 00:00:00 2001 From: a2a-cloud Date: Mon, 13 Jul 2026 03:33:09 +0000 Subject: [PATCH] a2a-source-edit: write agent.py --- agent.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/agent.py b/agent.py index 7428f97..a66deb7 100644 --- a/agent.py +++ b/agent.py @@ -1061,7 +1061,7 @@ def _unsafe_ip(ip: ipaddress._BaseAddress) -> bool: return bool(ip.is_private or ip.is_loopback or ip.is_link_local or ip.is_multicast or ip.is_reserved or ip.is_unspecified) -async def _validate_endpoint_target(url: str, allowlist: list[str]) -> str | None: +def _validate_endpoint_metadata(url: str, allowlist: list[str]) -> str | None: parsed = urlparse(url) if parsed.scheme != "https" or not parsed.hostname: return "endpoint URL must be absolute https with a hostname" @@ -1072,6 +1072,15 @@ async def _validate_endpoint_target(url: str, allowlist: list[str]) -> str | Non _validate_hostname(host) except ValueError as exc: return str(exc) + return None + + +async def _validate_endpoint_target(url: str, allowlist: list[str]) -> str | None: + metadata_error = _validate_endpoint_metadata(url, allowlist) + if metadata_error: + return metadata_error + parsed = urlparse(url) + host = parsed.hostname.lower().rstrip(".") # type: ignore[union-attr] try: infos = await asyncio.to_thread(socket.getaddrinfo, host, parsed.port or 443, type=socket.SOCK_STREAM) except socket.gaierror as exc: