settings.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package settings
  2. import (
  3. "gopkg.in/ini.v1"
  4. "log"
  5. )
  6. var Conf *ini.File
  7. var (
  8. BuildTime string
  9. )
  10. type Server struct {
  11. HttpPort string
  12. RunMode string
  13. WebSocketToken string
  14. JwtSecret string
  15. HTTPChallengePort string
  16. Email string
  17. Database string
  18. Demo bool
  19. }
  20. var ServerSettings = &Server{
  21. HttpPort: "9000",
  22. RunMode: "debug",
  23. HTTPChallengePort: "9180",
  24. Database: "database",
  25. Demo: false,
  26. }
  27. var ConfPath string
  28. var sections = map[string]interface{}{
  29. "server": ServerSettings,
  30. }
  31. func Init(confPath string) {
  32. ConfPath = confPath
  33. Setup()
  34. }
  35. func Setup() {
  36. var err error
  37. Conf, err = ini.LooseLoad(ConfPath)
  38. if err != nil {
  39. log.Printf("setting.Setup: %v", err)
  40. } else {
  41. MapTo()
  42. }
  43. }
  44. func MapTo() {
  45. for k, v := range sections {
  46. mapTo(k, v)
  47. }
  48. }
  49. func ReflectFrom() {
  50. for k, v := range sections {
  51. reflectFrom(k, v)
  52. }
  53. }
  54. func mapTo(section string, v interface{}) {
  55. err := Conf.Section(section).MapTo(v)
  56. if err != nil {
  57. log.Fatalf("Cfg.MapTo %s err: %v", section, err)
  58. }
  59. }
  60. func reflectFrom(section string, v interface{}) {
  61. err := Conf.Section(section).ReflectFrom(v)
  62. if err != nil {
  63. log.Fatalf("Cfg.ReflectFrom %s err: %v", section, err)
  64. }
  65. }
  66. func Save() (err error) {
  67. err = Conf.SaveTo(ConfPath)
  68. if err != nil {
  69. return
  70. }
  71. Setup()
  72. return
  73. }