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 BlockUnknownConnections 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, BlockUnknownConnections: false, } 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) } }