github.com/engineyard/workflow-cli@v2.21.6+incompatible/settings/settings.go (about) 1 package settings 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 10 deis "github.com/teamhephy/controller-sdk-go" 11 "github.com/teamhephy/workflow-cli/version" 12 ) 13 14 // DefaultResponseLimit is the default number of responses to return on requests that can 15 // be limited. 16 const DefaultResponseLimit = 100 17 18 // UserAgent is the user agent used by the CLI 19 var UserAgent = "Deis Client " + version.Version 20 21 type settingsFile struct { 22 Username string `json:"username"` 23 VerifySSL bool `json:"ssl_verify"` 24 Controller string `json:"controller"` 25 Token string `json:"token"` 26 Limit int `json:"response_limit"` 27 } 28 29 // Settings is the settings object created from the settings file. 30 type Settings struct { 31 Username string 32 Limit int 33 Client *deis.Client 34 } 35 36 // Load loads a new client from a settings file. 37 func Load(cf string) (*Settings, error) { 38 filename := locateSettingsFile(cf) 39 40 if _, err := os.Stat(filename); err != nil { 41 if os.IsNotExist(err) { 42 return nil, fmt.Errorf(`Client configuration file not found at: %s 43 Are you logged in? Use 'deis login' or 'deis register' to get started.`, filename) 44 } 45 46 return nil, err 47 } 48 49 contents, err := ioutil.ReadFile(filename) 50 if err != nil { 51 return nil, err 52 } 53 54 sF := settingsFile{} 55 if err = json.Unmarshal(contents, &sF); err != nil { 56 return nil, err 57 } 58 59 c, err := deis.New(sF.VerifySSL, sF.Controller, sF.Token) 60 61 if err != nil { 62 return nil, err 63 } 64 65 // Set a custom user agent 66 c.UserAgent = UserAgent 67 68 settings := Settings{} 69 settings.Username = sF.Username 70 settings.Client = c 71 72 // If users have defined a custom response limit, respect it. 73 if sF.Limit > 0 { 74 settings.Limit = sF.Limit 75 } else { 76 settings.Limit = DefaultResponseLimit 77 } 78 79 return &settings, nil 80 } 81 82 // Save settings to a file 83 func (s *Settings) Save(cf string) (string, error) { 84 settings := settingsFile{Username: s.Username, VerifySSL: s.Client.VerifySSL, 85 Controller: s.Client.ControllerURL.String(), Token: s.Client.Token, Limit: s.Limit} 86 87 settingsContents, err := json.Marshal(settings) 88 89 if err != nil { 90 return "", err 91 } 92 93 if err = os.MkdirAll(filepath.Join(FindHome(), "/.deis/"), 0700); err != nil { 94 return "", err 95 } 96 97 filename := locateSettingsFile(cf) 98 99 return filename, ioutil.WriteFile(filename, settingsContents, 0600) 100 } 101 102 // Delete user's settings file. 103 func Delete(cf string) error { 104 filename := locateSettingsFile(cf) 105 106 if _, err := os.Stat(filename); err != nil { 107 if os.IsNotExist(err) { 108 return nil 109 } 110 111 return err 112 } 113 114 if err := os.Remove(filename); err != nil { 115 return err 116 } 117 118 return nil 119 }