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