settings.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. err := Conf.Section(section).ReflectFrom(v)
  55. if err != nil {
  56. log.Fatalf("Cfg.ReflectFrom %s err: %v", section, err)
  57. }
  58. }
  59. func Save() (err error) {
  60. err = Conf.SaveTo(ConfPath)
  61. if err != nil {
  62. return
  63. }
  64. Setup()
  65. return
  66. }