settings.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package v1
  2. import (
  3. "net/http"
  4. "github.com/allanpk716/ChineseSubFinder/pkg/types/backend"
  5. "github.com/allanpk716/ChineseSubFinder/pkg/common"
  6. "github.com/allanpk716/ChineseSubFinder/pkg/settings"
  7. "github.com/gin-gonic/gin"
  8. )
  9. func (cb ControllerBase) SettingsHandler(c *gin.Context) {
  10. var err error
  11. defer func() {
  12. // 统一的异常处理
  13. cb.ErrorProcess(c, "SettingsHandler", err)
  14. }()
  15. switch c.Request.Method {
  16. case "GET":
  17. {
  18. // 回复没有密码的 settings
  19. c.JSON(http.StatusOK, settings.GetSettings().GetNoPasswordSettings())
  20. }
  21. case "PUT":
  22. {
  23. // 修改设置,这里不允许修改密码
  24. reqSetupInfo := settings.Settings{}
  25. err = c.ShouldBindJSON(&reqSetupInfo)
  26. if err != nil {
  27. return
  28. }
  29. // 需要去除 user 的 password 信息再保存,也就是继承之前的 password 即可
  30. err = settings.GetSettings().Read()
  31. if err != nil {
  32. return
  33. }
  34. nowPassword := settings.GetSettings().UserInfo.Password
  35. reqSetupInfo.UserInfo.Password = nowPassword
  36. err = settings.SetFullNewSettings(&reqSetupInfo)
  37. if err != nil {
  38. return
  39. }
  40. err = settings.GetSettings().Save()
  41. if err != nil {
  42. return
  43. }
  44. // ----------------------------------------
  45. // 设置接口的 API TOKEN
  46. if settings.GetSettings().ExperimentalFunction.ApiKeySettings.Enabled == true {
  47. common.SetApiToken(settings.GetSettings().ExperimentalFunction.ApiKeySettings.Key)
  48. } else {
  49. common.SetApiToken("")
  50. }
  51. // ----------------------------------------
  52. // 不管如何,都进行一次代理服务器的关闭,然后开启由具体的 获取 ProxySettings GetLocalHttpProxyUrl 操作开启这个服务器
  53. err = settings.GetSettings().AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
  54. if err != nil {
  55. return
  56. }
  57. // 重新设置本地的静态文件服务器
  58. cb.StaticFileSystemBackEnd.Stop()
  59. cb.StaticFileSystemBackEnd.Start(cb.cronHelper.Settings.CommonSettings)
  60. c.JSON(http.StatusOK, backend.ReplyCommon{Message: "Settings Save Success"})
  61. }
  62. default:
  63. c.JSON(http.StatusNoContent, backend.ReplyCommon{Message: "Settings Request.Method Error"})
  64. }
  65. }