def _get_deprecated_base_url( hass: HomeAssistant, *, internal: bool = False, allow_ip: bool = True, require_current_request: bool = False, require_ssl: bool = False, require_standard_port: bool = False, ) -> str: """Work with the deprecated `base_url`, used as fallback.""" if hass.config.api is None or not hass.config.api.deprecated_base_url: raise NoURLAvailableError base_url = yarl.URL(hass.config.api.deprecated_base_url) # Rules that apply to both internal and external if ((allow_ip or not is_ip_address(str(base_url.host))) and (not require_current_request or base_url.host == _get_request_host()) and (not require_ssl or base_url.scheme == "https") and (not require_standard_port or base_url.is_default_port())): # Check to ensure an internal URL if internal and (str(base_url.host).endswith(".local") or (is_ip_address(str(base_url.host)) and not is_loopback(ip_address(base_url.host)) and is_private(ip_address(base_url.host)))): return normalize_url(str(base_url)) # Check to ensure an external URL (a little) if (not internal and not str(base_url.host).endswith(".local") and not (is_ip_address(str(base_url.host)) and is_local(ip_address(str(base_url.host))))): return normalize_url(str(base_url)) raise NoURLAvailableError
def test_is_private(): """Test private addresses.""" assert network_util.is_private(ip_address("192.168.0.1")) assert network_util.is_private(ip_address("172.16.12.0")) assert network_util.is_private(ip_address("10.5.43.3")) assert network_util.is_private(ip_address("fd12:3456:789a:1::1")) assert not network_util.is_private(ip_address("127.0.0.1")) assert not network_util.is_private(ip_address("::1"))