proxy.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package base
  2. import (
  3. "net/http"
  4. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/local_http_proxy_server"
  5. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/settings"
  6. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/sub_supplier/a4k"
  7. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/types/backend"
  8. subSupplier "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/sub_supplier"
  9. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/sub_supplier/assrt"
  10. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/sub_supplier/shooter"
  11. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/sub_supplier/xunlei"
  12. "github.com/gin-gonic/gin"
  13. )
  14. func (cb *ControllerBase) CheckProxyHandler(c *gin.Context) {
  15. var err error
  16. defer func() {
  17. // 统一的异常处理
  18. cb.ErrorProcess(c, "CheckProxyHandler", err)
  19. }()
  20. if cb.proxyCheckLocker.Lock() == false {
  21. c.JSON(http.StatusOK, backend.ReplyCommon{Message: "running"})
  22. return
  23. }
  24. defer func() {
  25. cb.proxyCheckLocker.Unlock()
  26. }()
  27. checkProxy := backend.ReqCheckProxy{}
  28. err = c.ShouldBindJSON(&checkProxy)
  29. if err != nil {
  30. return
  31. }
  32. // 备份一份
  33. bkProxySettings := settings.Get().AdvancedSettings.ProxySettings.CopyOne()
  34. // 赋值 Web 传递过来的需要测试的代理参数
  35. settings.Get().AdvancedSettings.ProxySettings = &checkProxy.ProxySettings
  36. settings.Get().AdvancedSettings.ProxySettings.UseProxy = true
  37. defer func() {
  38. // 还原
  39. settings.Get().AdvancedSettings.ProxySettings = bkProxySettings
  40. err = local_http_proxy_server.SetProxyInfo(settings.Get().AdvancedSettings.ProxySettings.GetInfos())
  41. if err != nil {
  42. return
  43. }
  44. // 启动代理
  45. local_http_proxy_server.GetProxyUrl()
  46. }()
  47. // 设置代理
  48. err = local_http_proxy_server.SetProxyInfo(settings.Get().AdvancedSettings.ProxySettings.GetInfos())
  49. if err != nil {
  50. return
  51. }
  52. // 使用提交过来的这个代理地址,测试多个字幕网站的可用性
  53. subSupplierHub := subSupplier.NewSubSupplierHub(
  54. // 这里无需传递下载字幕的缓存实例
  55. //zimuku.NewSupplier(cb.fileDownloader),
  56. //subhd.NewSupplier(cb.fileDownloader),
  57. xunlei.NewSupplier(cb.fileDownloader),
  58. shooter.NewSupplier(cb.fileDownloader),
  59. a4k.NewSupplier(cb.fileDownloader),
  60. )
  61. if settings.Get().SubtitleSources.AssrtSettings.Enabled == true &&
  62. settings.Get().SubtitleSources.AssrtSettings.Token != "" {
  63. // 如果开启了 ASSRt 字幕源,则需要测试 ASSRt 的代理
  64. subSupplierHub.AddSubSupplier(assrt.NewSupplier(cb.fileDownloader))
  65. }
  66. outStatus := subSupplierHub.CheckSubSiteStatus()
  67. c.JSON(http.StatusOK, outStatus)
  68. }