Files
server-manager/plans/v1.3.0-stability-totp.md
chrome-storm-c442 bf39fd7b67 v1.2.0 + v1.3.0: Localization, About dialog, TOTP/2FA, stability improvements
v1.2.0:
- GUI localization (EN/RU/ZH) with language switcher and persistent selection
- About dialog (ⓘ) with app info, features, quick start guide
- core/i18n.py — internationalization module with t() function
- All GUI components translated via t() keys

v1.3.0:
- TOTP/2FA tab — Google Authenticator compatible codes with live 30s countdown,
  one-click copy, per-server secret management
- core/totp.py — TOTP module (pyotp, RFC 6238)
- core/logger.py — rotating file logger (5MB, 3 backups)
- Stronger Fernet encryption key with automatic migration from old key
- Thread-safe server store with locks, atomic writes, auto-restore on corruption
- Parallel status checks via ThreadPoolExecutor (up to 10 concurrent)
- SSH client: explicit channel cleanup, Unix key permissions
- Server dialog: port validation (1-65535), TOTP secret field
- Language change preserves active tab and server selection
- pyotp dependency added

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:07:51 -05:00

92 lines
4.1 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.
# 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` | без изменений |