Skip to content

v1.10.0 — гонки записи, XSS, модульность

Choose a tag to compare

@Matysh Matysh released this 05 Jul 18:17

Бэкенд

  • Гонка записи устранена: все циклы load→modify→save (layout/set|update|delete,
    config/set) сериализованы общим asyncio.Lock — параллельные WS-вызовы больше не теряют
    изменения, проверка expected_rev стала атомарной.
  • Новая WS-команда houseplan/layout/delete — чистка позиции при удалении маркера
    (раньше в .storage/houseplan.layout копились сироты).
  • Удалена мёртвая WS-команда houseplan/file/set — файлы грузятся только по HTTP
    (/api/houseplan/upload), как и было в карточке.
  • HTTP-загрузка: лимит 25 МБ применяется ПО МЕРЕ чтения multipart (обрыв на лимите),
    а не после чтения всего файла в память; stat() файлов ушёл в executor.
  • request.app[KEY_HASS] вместо устаревшего request.app["hass"] (с фолбэком для старых HA).

Фронтенд

  • God-component разобран: houseplan-card.ts 3023 → ~1990 строк.
    Стили → styles.ts; типы → types.ts; построение устройств из реестров HA
    (курирование, группы света, маркеры, LQI/температура) → devices.ts (чистые функции).
  • Last-writer-wins в раскладке устранён: _saveMarker пишет позицию точечно
    (layout/update), а не всей раскладкой (layout/set) — не затирает позиции из других
    окон (регресс-класс инцидента v1.4.4). Перепривязка/удаление подчищают старую позицию.
  • XSS закрыт: link и pdfs[].url маркеров проходят safeUrl() (только http(s)
    и относительные пути; javascript:/data: отбрасываются). +12 тестов.
  • Загрузка файлов через hass.fetchWithAuth (автообновление протухшего токена),
    фолбэк на сырой токен.
  • Хардкод дачи убран из GUI-редактора: список «пространство по умолчанию» строится
    из серверного конфига (WS config/get), а не зашитых f1/f2/yard.
  • rules.ts: удалён мёртвый экспорт GROUP_TITLES; регэкспы iconFor прекомпилированы.
  • Единый _errText() во всех обработчиках ошибок (никогда «[object Object]»).