dvr_admin/CHANGELOG.md
deeily fa730238d0 Release dvr_admin v1.6
Переведено скачивание клипов на Hikvision SDK (PlayBackByTime_V40 +
data callback) — точное время по часам DVR без seek-смещения.
Исправлена загрузка SDK-библиотек через self-restart с LD_LIBRARY_PATH.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 12:26:38 +03:00

107 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog
Все значимые изменения фиксируются в этом файле.
Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/).
## [1.6] — 2026-04-07
### Исправлено
- Скачивание клипов переведено на Hikvision SDK (`PlayBackByTime_V40` + data callback):
точное время начала по часам DVR, без seek-смещения
- SDK-библиотеки загружаются корректно: процесс перезапускается с правильным `LD_LIBRARY_PATH`,
чтобы `libPlayCtrl.so` находила зависимость `libAudioRender.so`
---
## [1.5] — 2026-04-06
### Добавлено
- Дашборд обычного пользователя: карточки «Время» (живые часы) и «Версия»
- Дашборд: обычный пользователь видит только разрешённые ему регистраторы
- IP регистратора в шапке предпросмотра — кликабельная ссылка на веб-интерфейс устройства
### Безопасность
- **CSRF-защита:** все state-changing запросы (POST/PUT/DELETE) проверяют токен сессии;
токен автоматически добавляется в формы и fetch-запросы через JavaScript
- **Куки сессии:** установлены флаги `HttpOnly` и `SameSite=Lax` — куки недоступны из JS
и не отправляются при кросс-сайтовых запросах
- **Открытый редирект:** параметр `next` после логина принимается только как относительный путь,
исключая редирект на внешние домены
- **XSS:** все пользовательские данные в HTML-шаблонах экранируются через `html.escape()`
вместо частичного `replace('"', '&quot;')`
- **Валидация параметров:** `channel`, `year`, `month` проверяются на допустимый формат и диапазон
до использования в XML-запросах и вычислениях
- **Контроль доступа:** `/api/dvr/<id>/ping` теперь проверяет права пользователя на конкретный DVR
- **Небезопасный ключ по умолчанию:** при запуске без `SECRET_KEY` выводится предупреждение в stderr
### Убрано
- Лишние папки и скрипты со старым кодом который уже нигде не используется
### Исправлено
- Удаление пользователя не срабатывало — клик всплывал на строку таблицы и перехватывался её `onclick`
- После добавления CSRF-защиты ломались пинги регистраторов (порядок загрузки скриптов)
- После выхода из просмотра канала предпросмотр не возобновлял поток
### Улучшено
- Предпросмотр каналов, плеер, календарь и таймлайн теперь полностью адаптируются к светлой/тёмной теме
- Кнопка «Войти» на странице логина: hover больше не сливается с фоном
- IP регистратора в шапке: обводка-кнопка без подчёркивания, появляется только после выбора DVR
- Архивный плеер: спиннер ожидания при загрузке потока (переключение режима, перемотка, клик по таймлайну)
- Архивный плеер: отображение текущего времени воспроизведения обновляется каждую секунду
- Таймлайн: убраны сегменты записей, метки каждый час (024) вместо каждых 3 часов
- Скачивание клипа: поля времени разбиты на отдельные ЧЧ / ММ / СС — каждая часть редактируется независимо
- Скачивание клипа: кнопка «Отменить» прерывает загрузку и завершает ffmpeg-процесс на сервере
---
## [1.4] — 2026-04-05
### Добавлено
- Сохранение пользовательского порядка каналов предпросмотра (drag-and-drop, per-user)
---
## [1.2] — 2026-04-05
### Добавлено
- Смена пароля веб-пользователей (включая admin)
- Отключение/включение учётных записей (включая admin)
- Docker-контейнер: `dvr_admin_docker/` с Gunicorn, инструкция деплоя `DEPLOY.md`
- Ключ шифрования Fernet через переменную окружения `FERNET_KEY`
### Исправлено
- Скачивание клипа всегда начиналось с начала сегмента — теперь с запрошенного времени (byte-range seek)
- Колонки таблицы веб-пользователей съезжали при добавлении колонки «Статус»
---
## [1.1] — 2026-04-03
### Добавлено
- Панель сохранения клипа: выбор времени начала/конца, формат mp4/mkv/gif
- Быстрое скачивание клипов через ISAPI HTTP download (~14 MB/s вместо RTSP)
- YouTube-подобный спиннер загрузки для предпросмотра, основного потока и архива
- Адаптивный FPS основного потока и архива (подстраивается под DVR)
### Исправлено
- ffmpeg-процессы не завершались при переключении между DVR — утечка CPU
- Предпросмотр не загружался на DVR со спецсимволами в пароле (`;#{}]`)
- Клипы скачивались с начала сегмента вместо запрошенного времени
### Улучшено
- Предпросмотр: 1 fps на канал через `-skip_frame noref` (снижение нагрузки на CPU)
- SSE-поток предпросмотра ставится на паузу при открытии полноэкранного плеера
---
## [1.0] — 2026-04-01
### Добавлено
- Централизованное управление регистраторами Hikvision
- Авторизация с bcrypt, шифрование паролей DVR через Fernet
- Предпросмотр каналов через SSE (Server-Sent Events)
- Просмотр архива с календарём и треком записей
- Управление пользователями и правами доступа к DVR/концепциям
- Поддержка Hikvision SDK (libhcnetsdk, libPlayCtrl) для Hi-Watch HEVC+