system

settingsService

settingsService

src/main/services/settings.service.ts


Для чого це

Зберігає налаштування між запусками: логін/пароль для автологіну, масштаб UI, розміри вікна. Файл лежить поза userData — в Documents/golden-logs/settings.json, щоб не видалявся при перевстановленні.


Що зберігає (ISettings)

ПолеТипПризначення
emailstring (encrypted)Email для автологіну
passwordstring (encrypted)Пароль для автологіну
uiScalenumberМасштаб інтерфейсу (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 і масштаб зберігаються між оновленнями

Зв’язки