settings.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package system
  2. import (
  3. "github.com/0xJacky/Nginx-UI/api"
  4. "github.com/0xJacky/Nginx-UI/internal/cron"
  5. "github.com/0xJacky/Nginx-UI/settings"
  6. "github.com/gin-gonic/gin"
  7. "net/http"
  8. "reflect"
  9. )
  10. func GetSettings(c *gin.Context) {
  11. c.JSON(http.StatusOK, gin.H{
  12. "server": settings.ServerSettings,
  13. "nginx": settings.NginxSettings,
  14. "openai": settings.OpenAISettings,
  15. "logrotate": settings.LogrotateSettings,
  16. })
  17. }
  18. func SaveSettings(c *gin.Context) {
  19. var json struct {
  20. Server settings.Server `json:"server"`
  21. Nginx settings.Nginx `json:"nginx"`
  22. Openai settings.OpenAI `json:"openai"`
  23. Logrotate settings.Logrotate `json:"logrotate"`
  24. }
  25. if !api.BindAndValid(c, &json) {
  26. return
  27. }
  28. if settings.LogrotateSettings.Enabled != json.Logrotate.Enabled ||
  29. settings.LogrotateSettings.Interval != json.Logrotate.Interval {
  30. go cron.RestartLogrotate()
  31. }
  32. fillSettings(&settings.ServerSettings, &json.Server)
  33. fillSettings(&settings.NginxSettings, &json.Nginx)
  34. fillSettings(&settings.OpenAISettings, &json.Openai)
  35. fillSettings(&settings.LogrotateSettings, &json.Logrotate)
  36. err := settings.Save()
  37. if err != nil {
  38. api.ErrHandler(c, err)
  39. return
  40. }
  41. GetSettings(c)
  42. }
  43. func fillSettings(targetSettings interface{}, newSettings interface{}) {
  44. s := reflect.TypeOf(targetSettings).Elem()
  45. vt := reflect.ValueOf(targetSettings).Elem()
  46. vn := reflect.ValueOf(newSettings).Elem()
  47. // copy the values from new to target settings if it is not protected
  48. for i := 0; i < s.NumField(); i++ {
  49. if s.Field(i).Tag.Get("protected") != "true" {
  50. vt.Field(i).Set(vn.Field(i))
  51. }
  52. }
  53. }