settings.go 1.3 KB

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