{"record":{"id":"71cf240fbdcdd854","repo":"ZhuLinsen/daily_stock_analysis","slug":"source-url-host-is-not-allowed","errorCode":null,"errorMessage":"source url host is not allowed","messagePattern":"source url host is not allowed","errorType":"validation","errorClass":"IntelligenceServiceError","httpStatus":400,"severity":"error","filePath":"src/services/intelligence_service.py","lineNumber":404,"sourceCode":"            \"scope_type\": scope_type,\n            \"scope_value\": scope_value[:64] if scope_value else None,\n            \"market\": market,\n            \"description\": description,\n        }\n\n    def _validate_url(self, raw_url: str, *, allow_no_url: bool = False) -> None:\n        if allow_no_url and raw_url.startswith(\"no-url:intel:\"):\n            return\n        parsed = urlparse(raw_url)\n        if parsed.scheme.lower() not in {\"http\", \"https\"} or not parsed.netloc:\n            raise IntelligenceServiceError(\"source url must be an absolute http(s) URL\")\n        if parsed.username or parsed.password:\n            raise IntelligenceServiceError(\"source url must not contain credentials\")\n        hostname = (parsed.hostname or \"\").strip().lower().rstrip(\".\")\n        if not hostname:\n            raise IntelligenceServiceError(\"source url host is required\")\n        if hostname in _PRIVATE_HOSTNAMES or hostname.endswith(\".local\"):\n            raise IntelligenceServiceError(\"source url host is not allowed\")\n        has_public_address = False\n        try:\n            ip = ipaddress.ip_address(hostname)\n        except ValueError:\n            ip = None\n        if ip is not None:\n            if self._is_blocked_ip(ip):\n                raise IntelligenceServiceError(\"source url must not target private or local network addresses\")\n            return\n        try:\n            addr_infos = socket.getaddrinfo(hostname, None)\n        except OSError as exc:\n            raise IntelligenceServiceError(f\"source url host DNS resolution failed: {hostname}\") from exc\n        if not addr_infos:\n            raise IntelligenceServiceError(f\"source url host DNS resolution failed: {hostname}\")\n        for info in addr_infos:\n            try:\n                ip = ipaddress.ip_address(info[4][0])","sourceCodeStart":386,"sourceCodeEnd":422,"githubUrl":"https://github.com/ZhuLinsen/daily_stock_analysis/blob/5159bd72e8373d215492dff122acc9d389e219c9/src/services/intelligence_service.py#L386-L422","documentation":"Error \"source url host is not allowed\" thrown in ZhuLinsen/daily_stock_analysis.","triggerScenarios":"Thrown at src/services/intelligence_service.py:404 when the library encounters an invalid state.","commonSituations":"Raised when the intelligence source URL host is not on the allowlist; occurs when the host is explicitly blocked by the source host policy.","solutions":["Use a source URL whose host is on the allowed list.","If the host is legitimate, add it to the allowed-hosts configuration explicitly.","Remove or replace sources pointing to disallowed hosts."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5159bd72e8373d215492dff122acc9d389e219c9","analyzedAt":"2026-08-15T01:59:36.292Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}