proxy.go 2.9 KB

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