"""Die Adresse, unter der Geraete Home Assistant erreichen. Frei von HA-Importen.""" from __future__ import annotations from urllib.parse import urlsplit from .const import FIRMWARE_KEY_LENGTH, FIRMWARE_URL_PREFIX, MAX_DEVICE_URL_LENGTH def firmware_url(base: str, key: str) -> str: return f"{base.rstrip('/')}{FIRMWARE_URL_PREFIX}{key}" def validate_device_base_url(url: str) -> str | None: """None, wenn brauchbar, sonst der Fehlerschluessel fuer das Formular.""" 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_DEVICE_URL_LENGTH: return "base_url_too_long" return None