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>
This commit is contained in:
chrome-storm-c442
2026-02-23 11:07:51 -05:00
parent f86d6a7214
commit bf39fd7b67
26 changed files with 2029 additions and 246 deletions

View File

@@ -0,0 +1,91 @@
# 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` | без изменений |