package main import ( "encoding/json" "fmt" "io/ioutil" "os" "path" "reflect" ) var ( config map[string]interface{} ) // LoadConfig loads the config func LoadConfig() { stagedRoutedHostnames := make(map[string]int) stagedSites := []Site{} var err error var files []os.FileInfo if err = os.MkdirAll(*sitesLoc, 0600); err != nil { fmt.Println(err) } if files, err = ioutil.ReadDir(*sitesLoc); err != nil { fmt.Println(err) return } var configFiles []os.FileInfo //Filter out non json files for _, f := range files { if f.IsDir() { continue } if path.Ext(f.Name()) != ".json" { continue } configFiles = append(configFiles, f) } //Process each site for _, f := range configFiles { var dat []byte var err error siteConf := make(map[string]interface{}) siteIndex := len(stagedSites) stagedSites = append(stagedSites, Site{}) if dat, err = ioutil.ReadFile(*sitesLoc + "/" + f.Name()); err != nil { fmt.Println(err) } if err = json.Unmarshal(dat, &siteConf); err != nil { fmt.Println(err) } switch siteConf["hostnames"].(type) { case []interface{}: for _, hostname := range siteConf["hostnames"].([]interface{}) { switch hostname.(type) { case string: fmt.Println("Adding hostname -> ", hostname) stagedRoutedHostnames[hostname.(string)] = siteIndex default: fmt.Println("Expected string but got ", reflect.TypeOf(hostname), " while parsing hostname in ", f.Name()) } } default: fmt.Println("Expected array but got ", reflect.TypeOf(siteConf["hostnames"]), " while parsing hosts in ", f.Name()) } switch siteConf["backends"].(type) { case []interface{}: for _, backend := range siteConf["backends"].([]interface{}) { switch backend.(type) { case string: fmt.Println("Adding backend -> ", backend) stagedSites[siteIndex].Backends = append(stagedSites[siteIndex].Backends, backend.(string)) default: fmt.Println("Expected string but got ", reflect.TypeOf(backend), " while parsing backend in ", f.Name()) } } default: fmt.Println("Expected array but got ", reflect.TypeOf(siteConf["backends"]), " while parsing backends in ", f.Name()) } switch siteConf["secret"].(type) { case string: stagedSites[siteIndex].Secret = siteConf["secret"].(string) default: fmt.Println("Expected string but got ", reflect.TypeOf(siteConf["secret"]), " while parsing secret in ", f.Name()) } routedHostnames = stagedRoutedHostnames Sites = stagedSites } }