config.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package main
  2. import (
  3. "fmt"
  4. "encoding/json"
  5. "io/ioutil"
  6. "runtime"
  7. "os"
  8. "errors"
  9. )
  10. type Config struct {
  11. configpath string
  12. linkpath string
  13. webpath string
  14. domain string
  15. }
  16. func geturl (url string, linkpath string, checkjson bool) (string, string) {
  17. payload := getlinks(linkpath)
  18. for k := range payload {
  19. if checkjson {
  20. if url == payload[k] {
  21. return url, k
  22. }
  23. } else {
  24. if url == k {
  25. return payload[k].(string), k
  26. }
  27. }
  28. }
  29. return "", ""
  30. }
  31. func getlinks (linkpath string) map[string]interface{} {
  32. data, err := ioutil.ReadFile(linkpath)
  33. if err != nil {
  34. fmt.Println("links.jsonを開けられません: ", err)
  35. }
  36. var payload map[string]interface{}
  37. json.Unmarshal(data, &payload)
  38. return payload
  39. }
  40. func getconf () (Config, error) {
  41. var cnf Config
  42. prefix := "/usr"
  43. if runtime.GOOS == "freebsd" || runtime.GOOS == "openbsd" {
  44. prefix += "/local"
  45. }
  46. cnf.configpath = "/etc/urloli/config.json"
  47. cnf.linkpath = "/etc/urloli/links.json"
  48. if runtime.GOOS == "freebsd" {
  49. cnf.configpath = prefix + cnf.configpath
  50. cnf.linkpath = prefix + cnf.linkpath
  51. }
  52. data, err := ioutil.ReadFile(cnf.configpath)
  53. if err != nil {
  54. fmt.Println("config.jsonを開けられません: ", err)
  55. return cnf, errors.New("コンフィグファイルは " + cnf.configpath + " に創作して下さい。")
  56. }
  57. var payload map[string]interface{}
  58. json.Unmarshal(data, &payload)
  59. if payload["webpath"] == nil {
  60. return cnf, errors.New("「webpath」の値が設置していません。")
  61. }
  62. if payload["domain"] == nil {
  63. return cnf, errors.New("「domain」の値が設置していません。")
  64. }
  65. if _, err := os.Stat(payload["webpath"].(string)); err != nil {
  66. fmt.Printf("%v\n", err)
  67. return cnf, errors.New("mkdirコマンドを使って、 " + payload["webpath"].(string))
  68. }
  69. if !checkprefix(payload["domain"].(string)) {
  70. return cnf, errors.New("URLは「http://」又は「https://」で始める様にして下さい。")
  71. }
  72. cnf.webpath = payload["webpath"].(string)
  73. cnf.domain = payload["domain"].(string)
  74. payload = nil
  75. return cnf, nil
  76. }