# Plan v1.3.0 — Stability, Security & TOTP Integration ## Version: 1.3.0 ## Date: 2026-02-23 --- ## 1. Усиление ключа шифрования **Файл:** `core/encryption.py` - Заменить слабый ключ на более сложный (64-char base64, сгенерированный из `os.urandom(32)`) - Ключ остаётся вшитым (by design), но существенно усложнён - Обратная совместимость: при первом запуске с новым ключом — авто-миграция старых данных ## 2. Atomic write + file locking для servers.json **Файл:** `core/server_store.py` - `threading.Lock` для синхронизации потоков - Запись через `.tmp` файл + `os.replace()` (атомарная замена) - Обработка `JSONDecodeError` при загрузке — авто-восстановление из бэкапа ## 3. Параллельная проверка статусов **Файл:** `core/status_checker.py` - `concurrent.futures.ThreadPoolExecutor(max_workers=10)` вместо последовательной проверки - 100 серверов: ~10 сек вместо ~500 сек ## 4. TOTP / Google Authenticator интеграция **Новый файл:** `core/totp.py` - `pyotp` для генерации TOTP-кодов - Функции: `generate_secret()`, `get_code(secret)`, `get_code_with_timer(secret)` **Изменение:** `core/server_store.py` - Поле `totp_secret` в данных сервера (шифруется вместе с паролем) **Новый файл:** `gui/tabs/totp_tab.py` - Вкладка "2FA" в tabview - Отображение текущего 6-значного кода с countdown (30 сек) - Кнопка копирования в буфер - Настройка: ввод secret для сервера - Авто-обновление каждую секунду **Изменения в i18n:** ключи для TOTP-вкладки на EN/RU/ZH ## 5. Валидация ввода в server_dialog **Файл:** `gui/server_dialog.py` - Проверка IP/hostname regex - Проверка порта 1-65535 - Inline-ошибки вместо мигания title ## 6. SSH resource cleanup **Файл:** `core/ssh_client.py` - Закрытие stdin/stdout/stderr в finally - Права 0o600 на сгенерированный ключ (Linux/Mac) ## 7. Логирование **Новый файл:** `core/logger.py` - `logging.handlers.RotatingFileHandler` → `~/.server-connections/app.log` - 5 MB max, 3 backup файла - Используется в server_store, ssh_client, status_checker ## 8. Pinned dependencies **Файл:** `requirements.txt` - Зафиксировать текущие версии - Добавить `pyotp` ## 9. Version bump + docs - `version.py` → 1.3.0 - `CHANGELOG.md` — запись 1.3.0 - `README.md` — TOTP в списке фич - `gui/app.py` — вкладка 2FA в tabview - `core/i18n.py` — ключи для TOTP --- ## Файлы и действия | Файл | Действие | |------|----------| | `core/encryption.py` | ИЗМЕНИТЬ — новый сложный ключ + миграция | | `core/server_store.py` | ИЗМЕНИТЬ — lock, atomic write, JSON error handling | | `core/status_checker.py` | ИЗМЕНИТЬ — параллельные проверки | | `core/ssh_client.py` | ИЗМЕНИТЬ — resource cleanup, key permissions | | `core/totp.py` | СОЗДАТЬ — TOTP-модуль | | `core/logger.py` | СОЗДАТЬ — logging framework | | `core/i18n.py` | ИЗМЕНИТЬ — TOTP-ключи | | `gui/app.py` | ИЗМЕНИТЬ — вкладка 2FA | | `gui/server_dialog.py` | ИЗМЕНИТЬ — валидация, TOTP secret поле | | `gui/tabs/totp_tab.py` | СОЗДАТЬ — TOTP вкладка | | `requirements.txt` | ИЗМЕНИТЬ — pinned + pyotp | | `version.py` | ИЗМЕНИТЬ — 1.3.0 | | `CHANGELOG.md` | ИЗМЕНИТЬ | | `README.md` | ИЗМЕНИТЬ | | `build.py` | без изменений |