settings.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. settings.ReflectFrom()
  37. err := settings.Save()
  38. if err != nil {
  39. api.ErrHandler(c, err)
  40. return
  41. }
  42. GetSettings(c)
  43. }
  44. func fillSettings(targetSettings interface{}, newSettings interface{}) {
  45. s := reflect.TypeOf(targetSettings).Elem()
  46. vt := reflect.ValueOf(targetSettings).Elem()
  47. vn := reflect.ValueOf(newSettings).Elem()
  48. // copy the values from new to target settings if it is not protected
  49. for i := 0; i < s.NumField(); i++ {
  50. if s.Field(i).Tag.Get("protected") != "true" {
  51. vt.Field(i).Set(vn.Field(i))
  52. }
  53. }
  54. }