diff --git a/features/groups/group_functionality.go b/features/groups/group_functionality.go index ef0cc14..d1ce1dd 100644 --- a/features/groups/group_functionality.go +++ b/features/groups/group_functionality.go @@ -97,12 +97,14 @@ func (gf *GroupFunctionality) HandleImportString(peer peer.CwtchPeer, importStri if strings.HasPrefix(importString, tofuBundlePrefix) { bundle := strings.Split(importString, "||") - err := gf.HandleImportString(peer, bundle[0][len(tofuBundlePrefix):]) - // if the server import failed then abort the whole process.. - if strings.HasSuffix(err.Error(), "success") == false { - return features.ConstructResponse(importBundlePrefix, err.Error()) + if len(bundle) == 2 { + err := gf.HandleImportString(peer, bundle[0][len(tofuBundlePrefix):]) + // if the server import failed then abort the whole process.. + if strings.HasSuffix(err.Error(), "success") == false { + return features.ConstructResponse(importBundlePrefix, err.Error()) + } + return gf.HandleImportString(peer, bundle[1]) } - return gf.HandleImportString(peer, bundle[1]) } else if strings.HasPrefix(importString, serverPrefix) { // Server Key Bundles are prefixed with bundle, err := base64.StdEncoding.DecodeString(importString[len(serverPrefix):]) diff --git a/lib.go b/lib.go index 43fa634..74ccd8e 100644 --- a/lib.go +++ b/lib.go @@ -52,6 +52,8 @@ func StartCwtch(appDir string, torPath string) { // Exclude Tapir wire Messages (We need a TRACE level) log.ExcludeFromPattern("service.go") + // Ensure that the application directory exists...and then initialize settings.. + os.MkdirAll(path.Join(appDir), 0700) utils.InitGlobalSettingsFile(appDir, "be gay do crime") log.Infof("Loading Cwtch Directory %v and tor path: %v", appDir, torPath) diff --git a/utils/settings.go b/utils/settings.go index 05b4c94..719404d 100644 --- a/utils/settings.go +++ b/utils/settings.go @@ -46,14 +46,17 @@ func InitGlobalSettingsFile(directory string, password string) error { var key [32]byte salt, err := ioutil.ReadFile(path.Join(directory, saltFile)) if err != nil { + log.Infof("Could not find salt file: %v (creating a new settings file)", err) var newSalt [128]byte key, newSalt, err = v1.CreateKeySalt(password) if err != nil { + log.Errorf("Could not initialize salt: %v", err) return err } os.Mkdir(directory, 0700) err := ioutil.WriteFile(path.Join(directory, saltFile), newSalt[:], 0600) if err != nil { + log.Errorf("Could not write salt file: %v", err) return err } } else { @@ -61,21 +64,28 @@ func InitGlobalSettingsFile(directory string, password string) error { } GlobalSettingsFile = v1.NewFileStore(directory, GlobalSettingsFilename, key) + log.Infof("initialized global settings file: %v", GlobalSettingsFile) return nil } func ReadGlobalSettings() *GlobalSettings { settings := DefaultGlobalSettings + if GlobalSettingsFile == nil { + log.Errorf("Global Settings File was not Initialized Properly") + return &settings + } + settingsBytes, err := GlobalSettingsFile.Read() if err != nil { - log.Errorf("Could not read global ui settings: %v\n", err) + log.Infof("Could not read global ui settings: %v (assuming this is a first time app deployment...)", err) return &settings //firstTime = true } err = json.Unmarshal(settingsBytes, &settings) if err != nil { log.Errorf("Could not parse global ui settings: %v\n", err) + // TODO if settings is corrupted, we probably want to alert the UI. return &settings //firstTime = true }