93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"cwtch.im/cwtch/event"
|
|
"cwtch.im/cwtch/storage/v1"
|
|
|
|
"encoding/json"
|
|
"git.openprivacy.ca/openprivacy/log"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
)
|
|
|
|
const (
|
|
UpdateGlobalSettings = event.Type("UpdateGlobalSettings")
|
|
)
|
|
|
|
var GlobalSettingsFile v1.FileStore
|
|
|
|
const GlobalSettingsFilename = "ui.globals"
|
|
const saltFile = "SALT"
|
|
|
|
type GlobalSettings struct {
|
|
Locale string
|
|
Theme string
|
|
PreviousPid int64
|
|
ExperimentsEnabled bool
|
|
Experiments map[string]bool
|
|
StateRootPane int
|
|
FirstTime bool
|
|
}
|
|
|
|
var DefaultGlobalSettings = GlobalSettings{
|
|
Locale: "en",
|
|
Theme: "light",
|
|
PreviousPid: -1,
|
|
ExperimentsEnabled: false,
|
|
Experiments: make(map[string]bool),
|
|
StateRootPane: 0,
|
|
FirstTime: true,
|
|
}
|
|
|
|
func InitGlobalSettingsFile(directory string, password string) error {
|
|
var key [32]byte
|
|
salt, err := ioutil.ReadFile(path.Join(directory, saltFile))
|
|
if err != nil {
|
|
var newSalt [128]byte
|
|
key, newSalt, err = v1.CreateKeySalt(password)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
os.Mkdir(directory, 0700)
|
|
err := ioutil.WriteFile(path.Join(directory, saltFile), newSalt[:], 0600)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
key = v1.CreateKey(password, salt)
|
|
}
|
|
|
|
GlobalSettingsFile = v1.NewFileStore(directory, GlobalSettingsFilename, key)
|
|
return nil
|
|
}
|
|
|
|
func ReadGlobalSettings() *GlobalSettings {
|
|
settings := DefaultGlobalSettings
|
|
|
|
settingsBytes, err := GlobalSettingsFile.Read()
|
|
if err != nil {
|
|
log.Errorf("Could not read global ui settings: %v\n", err)
|
|
return &settings //firstTime = true
|
|
}
|
|
|
|
err = json.Unmarshal(settingsBytes, &settings)
|
|
if err != nil {
|
|
log.Errorf("Could not parse global ui settings: %v\n", err)
|
|
return &settings //firstTime = true
|
|
}
|
|
|
|
log.Debugf("Settings: %#v", settings)
|
|
return &settings
|
|
}
|
|
|
|
func WriteGlobalSettings(globalSettings GlobalSettings) {
|
|
bytes, _ := json.Marshal(globalSettings)
|
|
// override first time setting
|
|
globalSettings.FirstTime = true
|
|
err := GlobalSettingsFile.Write(bytes)
|
|
if err != nil {
|
|
log.Errorf("Could not write global ui settings: %v\n", err)
|
|
}
|
|
}
|