Files
go-worm/lib/config/settings.go
T

76 lines
1.4 KiB
Go
Raw Normal View History

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)
}