English Version | Русская Версия
[1.22.0] - 2026-04-16
🚀 Добавлено:
- Графики: Добавлена поддержка масштабирования (
zoom) и перемещения (pan) для интерактивной навигации по графикам в WebUI. - Графики: В серверной части подготовлена поддержка выбора периода отображения статистики для всех типов графиков.
- Статистика: В серверной части реализован сбор исторических метрик и ротация данных для будущей периодизации графиков.
- Меню бота / WebUI: Категории кнопок автоматически скрываются, если все кнопки в них отключены пользователем (поддержка в боте и в разделе настроек WebUI).
⚙️ Архитектура и рефакторинг:
- Core/Web: Монолитный
core/server.pyдекомпозирован на модульную структуру маршрутов вcore/web/(app.py,middlewares.py,auth.py,api_nodes.py,api_system.py,views.py,streaming.py). - Фоновые задачи: Циклы
agent_monitorиcleanup_monitorвынесены вcore/tasks.py. - Технический долг: Удалено массивное дублирование кода и артефакты незавершённых конфликтов слияния git.
- RBAC: Создан централизованный модуль
core/rbac.pyс ролевой моделью (ROLE_USER/ROLE_ADMIN). Все веб-модули (api_nodes.py,api_system.py,streaming.py) переведены на него вместо разрозненных проверок.
🛡️ Безопасность:
- Веб-терминал: Закрыта SSRF-уязвимость в
handle_terminal_wsза счёт строгой валидации целевого IP только по зарегистрированным нодам. - CSRF: Внедрена глобальная защита
csrf_middlewareдля всех изменяющих данные конечных точек API. - Сессии: Предотвращён хранимый XSS через экранирование заголовка
User-Agentперед сохранением в сессию. - Куки: Сессионные куки усилены флагом
secure=Trueдля защиты от атаки «человек посередине». - Авторизация Telegram: Снижено TTL токена авторизации Telegram с 24 часов до 15 минут для снижения риска атак с повтором запросов.
- Журналы: Исправлена уязвимость произвольного удаления файлов через символическую ссылку в
handle_clear_logs. - Пароли: Проверка пароля по умолчанию переведена на
PasswordHasher, что устраняет риск атак по времени выполнения. - Авторизация: Исправлено небезопасное поведение по умолчанию в
core/auth.py—is_allowed()теперь возвращаетFalse; добавленыbtn_*-псевдонимы всех команд в соответствующие списки ролей; исправлена опечатка"fall2ban"→"fail2ban"в списке root-команд.
⚡ Производительность и инфраструктура:
- SQLite: Блокирующие запросы к
bot.dbобернуты вasyncio.to_thread, чтобы не блокировать цикл обработки событий. - Docker: Порт веб-сервера закреплён на
127.0.0.1:8080:8080, что исключает обход WAF и ограничений частоты запросов через прямой внешний доступ. (спасибо @artemkaa_2001). - Зависимости: Зафиксированы строгие версии зависимостей в
requirements.txt.
🔧 Исправлено:
- Интерфейс: Внесены визуальные правки индикаторов сохранения.
- Документация: Обновлены сопроводительные документы под новую архитектуру и релиз 1.22.0.
- Резервные копии: Исправлено 8 логических ошибок в
modules/backups.py: убрана нерабочая заглушкаdelete_previous_message; исправлен флагIS_SERVER_REBOOTпри ручном восстановлении трафика; исправлен порядок отображения текста в меню;backup_interval_resetтеперь сохраняет состояние ВКЛ/ОТКЛ таймера; исправлен некорректный декрементBACKUP_LAST_INTERVAL; убрана двойная проверка авторизации в_refresh_timer_settings. - Ноды — дублирующиеся уведомления: Исправлена отправка повторных предупреждений
alert_agent_down/alert_agent_recoveredвnode/node.py. ДобавленAGENT_STABLE_SINCE: оповещение о восстановлении отправляется только после того, как агент непрерывно доступен в течениеAGENT_ALERT_DELAY_SECONDS; любой повторный сбой сбрасывает окно стабильности не затрагивая исходныйAGENT_DOWN_SINCE.
Full Changelog: 1.21.0...1.22.0