Skip to content

Removal of the Token Proxy Container

Choose a tag to compare

@Tom-Bom-badil Tom-Bom-badil released this 01 Oct 23:32
397386e

👉 For end users

  • No more Token Proxy container.
    Authentication happens entirely inside the integration. You can stop/remove the separate “UGREEN API Token Proxy” Docker container after updating.
  • Less confusion during setup.
    The “Verify SSL” checkbox has been removed. The “Use HTTPS” option remains, but certificate verification toggles are no longer exposed, which prevents common misconfigurations.
  • Options changes now take immediate effect.
    Editing host/port/username/password via the Options screen now correctly updates the active connection (previously only the initial config applied).
  • Hungarian language support.
    Thanks to @gyuris for contributing a Hungarian translation for the config/option flows - much appreciated buddy! :)

👉 For fellow developers (internal changes)

Authentication & security

  • Removed dependency on the Token Proxy; replaced the proxy token flow with direct UGOS login: fetch public RSA/SPKI key, encrypt password (RSAES-PKCS#1 v1.5), call /verify/login, and append the returned token to subsequent requests. Credentials never leave Home Assistant anymore.
  • Removed: Proxy fields like auth_port/verify_ssl in the functional path; any external tooling expecting the proxy endpoints (/token, /credentials) is obsolete for the integration.

Data flow & runtime behavior

  • WebSocket keep-alive integrated; ws_keepalive() returns coroutine for Coordinator usage.
  • UpdateWebSocket() logic from the Docker helper has been ported and streamlined inside api.py.
  • Dynamic entities are built from a central registry (_config_definitions / _status_definitions), ensuring a uniform approach for LAN/USB/RAM/UPS/Fans/Storage.
  • Added consistent handling of “single vs multiple” entities (single_compact=True).
  • count_dynamic_entities introduced as cached API helper to pre-calculate #RAM, #Disks, #Volumes, etc.
  • Coordinators:
    • Config (60s), State (5s), WebSocket (25s) each with grouped API calls per endpoint.
    • Options-first fallback to entry.data ensures runtime updates on config edits.

Utilities / structure

  • get_entity_data_from_api(...) is centralized in utils.py and used by all coordinators.
  • make_entities(...) implemented with single_compact flag and unified placeholders.
  • build_device_info(...) implemented for Pools, Volumes, Disks.
  • api.py restructured: Public methods grouped at top, long logic factored into _count_dynamic_entities, _ws_keepalive, etc. for readability.
  • Code ordering and inline comments cleaned up across modules (__init__.py, sensor.py, button.py).