- login_required валидирует существование юзера в БД: при устаревшей
session (user_id ссылается на удалённую запись после пересоздания БД)
чистим session и редиректим на /login вместо 500 на user["is_admin"]
- entrypoint.sh чистит /tmp/.X1-lock перед Xvfb — иначе после креша
контейнера повторный старт падает с "Server is already active"
- CHANGELOG: запись v2.4.0 (Novicam integration) + v2.4.1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Security / шифрование:
- stream_key (128-byte KDF-derived key для encrypted H.265+) теперь
шифруется Fernet как и пароль DVR. Добавлены _enc_stream_key /
_dec_stream_key, расшифровка в _dvr_row, автомиграция plaintext→Fernet
при старте для существующих записей
- dvrs_add / dvrs_edit шифруют stream_key на INSERT/UPDATE
Resource cleanup:
- release(buf): kill() теперь вне buf.lock + wait(timeout=2) чтобы
не оставлять зомби-процессов (wine/ffmpeg) после disconnect
- view_playback: при смене ключа старый buffer также wait(timeout=2)
Docker:
- Dockerfile: установка wine + wine32 (i386) + xvfb для PlayCtrl.dll
- Предварительная инициализация WINEPREFIX=/app/.wine во время build
(избегаем задержек первого wineboot в runtime)
- entrypoint.sh запускает Xvfb на :1, затем gunicorn
- COPY dvr_admin/wine_playm4/ в образ (директория gitignore'д —
нужно положить вручную перед docker build, см. DEPLOY.md)
- DEPLOY.md: добавлена секция «Требования для сборки» с пояснением
про wine_playm4/ и варианты без него
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>