package main import ( "fmt" toml "github.com/pelletier/go-toml" "io/ioutil" "os" ) type ESConfiguration struct { Elastic ElasticConfiguration } type ElasticConfiguration struct { URL string User string Pass string } func LoadConfig(cfgpath string) *ESConfiguration { cfg := ESConfiguration{} if cfgpath != "" { cfgfile, err := ioutil.ReadFile(cfgpath) if err != nil { fmt.Fprintf(os.Stderr, "Read error: %s\n", err.Error()) os.Exit(1) } err = toml.Unmarshal(cfgfile, &cfg) if err != nil { fmt.Fprintf(os.Stderr, "Parse error: %s\n", err.Error()) os.Exit(1) } return &cfg } paths := []string{} homedir, _ := os.UserHomeDir() if homedir != "" { paths = append(paths, homedir+"/.es.toml") } paths = append(paths, "/etc/es.toml") for _, path := range paths { cfgfile, err := ioutil.ReadFile(path) if err != nil { continue } err = toml.Unmarshal(cfgfile, &cfg) if err != nil { continue } return &cfg } fmt.Fprintf(os.Stderr, "No valid configuration found in:\n") for _, path := range paths { fmt.Fprintf(os.Stderr, " %s\n", path) } os.Exit(1) return nil }