urloli/config.go

98 lines
2.4 KiB
Go

package main
import (
"fmt"
"encoding/json"
"io/ioutil"
"runtime"
"os"
"errors"
)
type Config struct {
configpath, linkpath, webpath, domain, ip 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"
} else if runtime.GOOS == "netbsd" {
prefix += "/pkg"
}
cnf.configpath = "/etc/urloli/config.json"
cnf.linkpath = "/etc/urloli/links.json"
if runtime.GOOS == "freebsd" || runtime.GOOS == "netbsd" {
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 payload["ip"] == nil {
return cnf, errors.New("「ip」の値が設置していません。")
}
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)
cnf.ip = payload["ip"].(string)
payload = nil
return cnf, nil
}