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