package config import ( "log" "os" "path/filepath" "git.sr.ht/~sircmpwn/getopt" "github.com/vaughan0/go-ini" "git.sr.ht/~sircmpwn/core-go/crypto" ) var ( Debug bool Addr string ) // Just loads the config files func LoadFiles() ini.File { var ( config ini.File err error ) // Only loads from one of these locations for _, path := range []string{ "config.ini", "../config.ini", "/etc/sr.ht/config.ini", "/etc/sr.ht/*.ini", } { matches, err_ := filepath.Glob(path) if err_ != nil { panic(err) // only happens on bad input } for _, f := range matches { if config == nil { config, err = ini.LoadFile(f) } else { err = config.LoadFile(f) } if err != nil { break } else { log.Printf("Loaded config from %s", f) } } if len(matches) > 0 { break } } if err != nil { log.Fatalf("Failed to load config file: %v", err) } return config } // Loads the application configuration, reads options from the command line, // and initializes some internals based on these results. func LoadConfig(defaultAddr string) ini.File { Addr = defaultAddr opts, _, err := getopt.Getopts(os.Args, "b:d") if err != nil { panic(err) } for _, opt := range opts { switch opt.Option { case 'b': Addr = opt.Value case 'd': Debug = true } } config := LoadFiles() crypto.InitCrypto(config) return config } func GetOrigin(conf ini.File, svc string, external bool) string { if external { origin, _ := conf.Get(svc, "origin") return origin } origin, ok := conf.Get(svc, "internal-origin") if ok { return origin } origin, _ = conf.Get(svc, "origin") return origin }