settings.go 1.2 KB

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