// GetSettings returns a Settings object for the current context func GetSettings(required bool, promptForEnv bool, envName string, baasHost string, paasHost string, username string, password string) *models.Settings { HomeDir, err := homedir.Dir() if err != nil { fmt.Println(err.Error()) os.Exit(1) } file, err := os.Open(filepath.Join(HomeDir, SettingsFile)) if os.IsNotExist(err) { file, err = os.Create(filepath.Join(HomeDir, SettingsFile)) } defer file.Close() if err != nil { fmt.Println(err.Error()) os.Exit(1) } var settings models.Settings json.NewDecoder(file).Decode(&settings) // would be best to default this to an initialized map rather than nil if settings.Environments == nil { settings.Environments = make(map[string]models.AssociatedEnv) } // try and set the given env first, if it exists if envName != "" { setGivenEnv(envName, &settings) if settings.EnvironmentID == "" || settings.ServiceID == "" { fmt.Printf("No environment named \"%s\" has been associated. Run \"catalyze associated\" to see what environments have been associated or run \"catalyze associate\" from a local git repo to create a new association\n", envName) os.Exit(1) } } // if no env name was given, try and fetch the local env if settings.EnvironmentID == "" || settings.ServiceID == "" { setLocalEnv(required, &settings) } // if its not there, fetch the default if settings.EnvironmentID == "" || settings.ServiceID == "" { setDefaultEnv(&settings) } // if no default, fetch the first associated env and print warning if settings.EnvironmentID == "" || settings.ServiceID == "" { // warn and ask setFirstAssociatedEnv(required, promptForEnv, &settings) } // if no env found, warn and quit if required && (settings.EnvironmentID == "" || settings.ServiceID == "") { fmt.Println("No Catalyze environment has been associated. Run \"catalyze associate\" from a local git repo first") os.Exit(1) } settings.BaasHost = baasHost settings.PaasHost = paasHost settings.Username = username settings.Password = password return &settings }