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. "logrotate": &LogrotateSettings,
  21. }
  22. func init() {
  23. t := time.Unix(cast.ToInt64(buildTime), 0)
  24. LastModified = strings.ReplaceAll(t.Format(time.RFC1123), "UTC", "GMT")
  25. }
  26. func Init(confPath string) {
  27. ConfPath = confPath
  28. Setup()
  29. }
  30. func Setup() {
  31. var err error
  32. Conf, err = ini.LooseLoad(ConfPath)
  33. if err != nil {
  34. log.Fatalf("setting.Setup: %v\n", err)
  35. }
  36. MapTo()
  37. }
  38. func MapTo() {
  39. for k, v := range sections {
  40. mapTo(k, v)
  41. }
  42. }
  43. func ReflectFrom() {
  44. for k, v := range sections {
  45. reflectFrom(k, v)
  46. }
  47. }
  48. func mapTo(section string, v interface{}) {
  49. err := Conf.Section(section).MapTo(v)
  50. if err != nil {
  51. log.Fatalf("Cfg.MapTo %s err: %v", section, err)
  52. }
  53. }
  54. func reflectFrom(section string, v interface{}) {
  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. }