github.com/emmahsax/go-git-helper@v0.0.8-0.20240519163017-907b9de0fa52/internal/configfile/configfile.go (about) 1 package configfile 2 3 import ( 4 "errors" 5 "os" 6 7 "github.com/emmahsax/go-git-helper/internal/utils" 8 yaml "gopkg.in/yaml.v3" 9 ) 10 11 type ConfigFileInterface interface { 12 ConfigDir() string 13 ConfigDirExists() bool 14 ConfigFile() string 15 ConfigFileExists() bool 16 GitHubUsername() string 17 GitLabUsername() string 18 GitHubToken() string 19 GitLabToken() string 20 } 21 22 type ConfigFile struct { 23 Debug bool 24 } 25 26 func NewConfigFile(debug bool) *ConfigFile { 27 return &ConfigFile{ 28 Debug: debug, 29 } 30 } 31 32 func (cf *ConfigFile) ConfigDir() string { 33 homeDir, err := os.UserHomeDir() 34 if err != nil { 35 utils.HandleError(err, cf.Debug, nil) 36 return "" 37 } 38 39 return homeDir + "/.git-helper" 40 } 41 42 func (cf *ConfigFile) ConfigDirExists() bool { 43 info, err := os.Stat(cf.ConfigDir()) 44 if err != nil { 45 if os.IsNotExist(err) { 46 return false 47 } 48 } 49 50 return info.IsDir() 51 } 52 53 func (cf *ConfigFile) ConfigFile() string { 54 return cf.ConfigDir() + "/config.yml" 55 } 56 57 func (cf *ConfigFile) ConfigFileExists() bool { 58 _, err := os.Stat(cf.ConfigFile()) 59 return err == nil 60 } 61 62 // TODO: pull from the values w/o the : at the beginning, as that's leftover from ruby to go migration 63 64 func (cf *ConfigFile) GitHubUsername() string { 65 configFile := cf.configFileContents() 66 if configFile["github_username"] != "" { 67 return configFile["github_username"] 68 } else { 69 return configFile[":github_user"] 70 } 71 } 72 73 func (cf *ConfigFile) GitLabUsername() string { 74 configFile := cf.configFileContents() 75 if configFile["gitlab_username"] != "" { 76 return configFile["gitlab_username"] 77 } else { 78 return configFile[":gitlab_user"] 79 } 80 } 81 82 func (cf *ConfigFile) GitHubToken() string { 83 configFile := cf.configFileContents() 84 if configFile["github_token"] != "" { 85 return configFile["github_token"] 86 } else { 87 return configFile[":github_token"] 88 } 89 } 90 91 func (cf *ConfigFile) GitLabToken() string { 92 configFile := cf.configFileContents() 93 if configFile["gitlab_token"] != "" { 94 return configFile["gitlab_token"] 95 } else { 96 return configFile[":gitlab_token"] 97 } 98 } 99 100 func (cf *ConfigFile) configFileContents() map[string]string { 101 var result map[string]string 102 data, err := os.ReadFile(cf.ConfigFile()) 103 if err != nil { 104 customErr := errors.New("error reading file: " + err.Error()) 105 utils.HandleError(customErr, cf.Debug, nil) 106 return result 107 } 108 109 err = yaml.Unmarshal(data, &result) 110 if err != nil { 111 customErr := errors.New("error unmarshaling YAML: " + err.Error()) 112 utils.HandleError(customErr, cf.Debug, nil) 113 return result 114 } 115 116 return result 117 }