"""The address lamps use to reach Home Assistant. Deliberately free of Home Assistant imports.""" from __future__ import annotations from urllib.parse import urlsplit from .const import FIRMWARE_KEY_LENGTH, FIRMWARE_URL_PREFIX, MAX_LAMP_URL_LENGTH def firmware_url(base: str, key: str) -> str: return f"{base.rstrip('/')}{FIRMWARE_URL_PREFIX}{key}" def validate_lamp_base_url(url: str) -> str | None: """Return None if usable, else the error key for the options form.""" try: parts = urlsplit(url) port_ok = parts.port is None or parts.port > 0 except ValueError: return "invalid_base_url" if ( parts.scheme != "http" or not parts.hostname or not port_ok or parts.username or parts.password or parts.query or parts.fragment or parts.path not in ("", "/") ): return "invalid_base_url" if len(firmware_url(url, "k" * FIRMWARE_KEY_LENGTH)) > MAX_LAMP_URL_LENGTH: return "base_url_too_long" return None