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