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  }