package main import ( "fmt" "encoding/json" "io/ioutil" "runtime" "os" "errors" ) type Config struct { configpath string linkpath string webpath string domain string } func geturl (url string, linkpath string, checkjson bool) (string, string) { payload := getlinks(linkpath) for k := range payload { if checkjson { if url == payload[k] { return url, k } } else { if url == k { return payload[k].(string), k } } } return "", "" } func getlinks (linkpath string) map[string]interface{} { data, err := ioutil.ReadFile(linkpath) if err != nil { fmt.Println("links.jsonを開けられません: ", err) } var payload map[string]interface{} json.Unmarshal(data, &payload) return payload } func getconf () (Config, error) { var cnf Config prefix := "/usr" if runtime.GOOS == "freebsd" || runtime.GOOS == "openbsd" { prefix += "/local" } cnf.configpath = "/etc/urloli/config.json" cnf.linkpath = "/etc/urloli/links.json" if runtime.GOOS == "freebsd" { cnf.configpath = prefix + cnf.configpath cnf.linkpath = prefix + cnf.linkpath } data, err := ioutil.ReadFile(cnf.configpath) if err != nil { fmt.Println("config.jsonを開けられません: ", err) return cnf, errors.New("コンフィグファイルは " + cnf.configpath + " に創作して下さい。") } var payload map[string]interface{} json.Unmarshal(data, &payload) if payload["webpath"] == nil { return cnf, errors.New("「webpath」の値が設置していません。") } if payload["domain"] == nil { return cnf, errors.New("「domain」の値が設置していません。") } if _, err := os.Stat(payload["webpath"].(string)); err != nil { fmt.Printf("%v\n", err) return cnf, errors.New("mkdirコマンドを使って、 " + payload["webpath"].(string)) } if !checkprefix(payload["domain"].(string)) { return cnf, errors.New("URLは「http://」又は「https://」で始める様にして下さい。") } cnf.webpath = payload["webpath"].(string) cnf.domain = payload["domain"].(string) payload = nil return cnf, nil }