github jatixs/tgbotvpscp 1.22.0

latest release: 1.22.1
11 hours ago

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.pyis_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

Don't miss a new tgbotvpscp release

NewReleases is sending notifications on new releases.