settingsService
src/main/services/settings.service.ts
Для чого це
Зберігає налаштування між запусками: логін/пароль для автологіну, масштаб UI, розміри вікна. Файл лежить поза userData — в Documents/golden-logs/settings.json, щоб не видалявся при перевстановленні.
Що зберігає (ISettings)
| Поле | Тип | Призначення |
|---|---|---|
email | string (encrypted) | Email для автологіну |
password | string (encrypted) | Пароль для автологіну |
uiScale | number | Масштаб інтерфейсу (default: 1) |
windowBounds | { width, height, x?, y? } | Розмір і позиція вікна при останньому закритті |
API
| Метод | Опис |
|---|---|
saveCredentials(email, password) | Шифрує і записує credentials в JSON |
getCredentials() | Читає і розшифровує. При помилці → { email: '', password: '' } |
saveUiScale(scale) | Зберігає числове значення масштабу |
getUiScale() | Повертає масштаб. Якщо файлу нема — 1 |
saveWindowBounds(bounds) | Зберігає { width, height, x?, y? } |
getWindowBounds() | Повертає bounds. Валідує що width/height — числа |
Всі методи читають і перезаписують весь файл цілком — JSON mergується вручну.
Шифрування credentials
Алгоритм: AES-256-CBC
Ключ: crypto.scryptSync('golden-bride-secret-key-2024', 'salt', 32) — 32 байти, захардкоджено
Формат зашифрованого рядка: "<iv_hex>:<encrypted_hex>"
iv— 16 випадкових байт, новий при кожному записі- Захист від “підивився в файл” — не від повноцінного злому (ключ у коді)
Шлях
~/Documents/golden-logs/settings.json
Директорія створюється в конструкторі через ensureDirectoryExists() якщо відсутня.
Нюанси
getWindowBounds()валідуєwidth/heightяк числа іx/yчерезNumber.isFinite— не довіряє файлу сліпо- Помилки читання/запису — логуються і не кидають виняток (не має блокувати старт)
- Файл не видаляється при перевстановленні — credentials і масштаб зберігаються між оновленнями
Зв’язки
- Credentials зберігає: Login
- WindowBounds: Workspace screen