Parses a proxy configuration or searches for a matching one via broker.
(proxy: Proxy)
| 189 | |
| 190 | |
| 191 | def parse_or_search_proxy(proxy: Proxy) -> ProxySettings: |
| 192 | """ |
| 193 | Parses a proxy configuration or searches for a matching one via broker. |
| 194 | """ |
| 195 | assert "server" in proxy, "Missing 'server' field in the proxy configuration." |
| 196 | |
| 197 | parsed_url = urlparse(proxy["server"]) |
| 198 | server_address = parsed_url.hostname |
| 199 | |
| 200 | if server_address is None: |
| 201 | raise ValueError(f"Invalid proxy server format: {proxy['server']}") |
| 202 | |
| 203 | # Accept both IP addresses and domain names like 'gate.nodemaven.com' |
| 204 | if is_ipv4_address(server_address) or re.match( |
| 205 | r"^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$", server_address |
| 206 | ): |
| 207 | return _parse_proxy(proxy) |
| 208 | |
| 209 | assert proxy["server"] == "broker", f"Unknown proxy server type: {proxy['server']}" |
| 210 | |
| 211 | return _search_proxy(proxy) |