- Add settings API and UI to toggle keylog - Persist preference in settings.json - Expose klogging state in status endpoint - Inject build version into web console - Bump version automatically on build
76 lines
1.4 KiB
Go
76 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type fileSettings struct {
|
|
Klogging *bool `json:"klogging,omitempty"`
|
|
KeylogEnabled *bool `json:"keylog_enabled,omitempty"` // legacy
|
|
}
|
|
|
|
func settingsPath() (string, error) {
|
|
dir, err := InstallDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return filepath.Join(dir, SettingsFileName), nil
|
|
}
|
|
|
|
func readKeylogPref() (bool, bool) {
|
|
s, err := loadFileSettings()
|
|
if err != nil {
|
|
return false, false
|
|
}
|
|
if s.Klogging != nil {
|
|
return *s.Klogging, true
|
|
}
|
|
if s.KeylogEnabled != nil {
|
|
return *s.KeylogEnabled, true
|
|
}
|
|
return false, false
|
|
}
|
|
|
|
func SetKeylogEnabled(on bool) error {
|
|
s, err := loadFileSettings()
|
|
if err != nil && !os.IsNotExist(err) {
|
|
s = fileSettings{}
|
|
}
|
|
s.Klogging = &on
|
|
s.KeylogEnabled = nil
|
|
return saveFileSettings(s)
|
|
}
|
|
|
|
func loadFileSettings() (fileSettings, error) {
|
|
path, err := settingsPath()
|
|
if err != nil {
|
|
return fileSettings{}, err
|
|
}
|
|
raw, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return fileSettings{}, err
|
|
}
|
|
var s fileSettings
|
|
if err := json.Unmarshal(raw, &s); err != nil {
|
|
return fileSettings{}, err
|
|
}
|
|
return s, nil
|
|
}
|
|
|
|
func saveFileSettings(s fileSettings) error {
|
|
path, err := settingsPath()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := os.MkdirAll(filepath.Dir(path), 0o700); err != nil {
|
|
return err
|
|
}
|
|
raw, err := json.Marshal(s)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(path, append(raw, '\n'), 0o600)
|
|
}
|