settings.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package settings
  2. import (
  3. "github.com/spf13/cast"
  4. "gopkg.in/ini.v1"
  5. "log"
  6. "strings"
  7. "time"
  8. )
  9. var Conf *ini.File
  10. var (
  11. buildTime string
  12. LastModified string
  13. )
  14. var ConfPath string
  15. var sections = map[string]interface{}{
  16. "server": &ServerSettings,
  17. "nginx": &NginxSettings,
  18. "openai": &OpenAISettings,
  19. "casdoor": &CasdoorSettings,
  20. }
  21. func init() {
  22. t := time.Unix(cast.ToInt64(buildTime), 0)
  23. LastModified = strings.ReplaceAll(t.Format(time.RFC1123), "UTC", "GMT")
  24. }
  25. func Init(confPath string) {
  26. ConfPath = confPath
  27. Setup()
  28. }
  29. func Setup() {
  30. var err error
  31. Conf, err = ini.LooseLoad(ConfPath)
  32. if err != nil {
  33. log.Fatalf("setting.Setup: %v\n", err)
  34. }
  35. MapTo()
  36. }
  37. func MapTo() {
  38. for k, v := range sections {
  39. mapTo(k, v)
  40. }
  41. }
  42. func ReflectFrom() {
  43. for k, v := range sections {
  44. reflectFrom(k, v)
  45. }
  46. }
  47. func mapTo(section string, v interface{}) {
  48. err := Conf.Section(section).MapTo(v)
  49. if err != nil {
  50. log.Fatalf("Cfg.MapTo %s err: %v", section, err)
  51. }
  52. }
  53. func reflectFrom(section string, v interface{}) {
  54. log.Print(section, v)
  55. err := Conf.Section(section).ReflectFrom(v)
  56. if err != nil {
  57. log.Fatalf("Cfg.ReflectFrom %s err: %v", section, err)
  58. }
  59. }
  60. func Save() (err error) {
  61. err = Conf.SaveTo(ConfPath)
  62. if err != nil {
  63. return
  64. }
  65. Setup()
  66. return
  67. }