sssub.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package provider
  2. import (
  3. "encoding/json"
  4. "strconv"
  5. "github.com/zu1k/proxypool/pkg/proxy"
  6. )
  7. type SSSub struct {
  8. Base
  9. }
  10. type ssJson struct {
  11. Remarks string `json:"remarks"`
  12. Server string `json:"server"`
  13. ServerPort string `json:"server_port"`
  14. Method string `json:"method"`
  15. Password string `json:"password"`
  16. Plugin string `json:"plugin"`
  17. PluginOpts map[string]interface{} `json:"plugin_opts"`
  18. }
  19. func (sub SSSub) Provide() string {
  20. sub.Types = "ss,ssr"
  21. sub.preFilter()
  22. proxies := make([]ssJson, 0, sub.Proxies.Len())
  23. for _, p := range *sub.Proxies {
  24. var pp *proxy.Shadowsocks
  25. if p.TypeName() == "ssr" {
  26. var err error
  27. pp, err = proxy.SSR2SS(p.(*proxy.ShadowsocksR))
  28. if err != nil {
  29. continue
  30. }
  31. } else if p.TypeName() == "ss" {
  32. pp = p.(*proxy.Shadowsocks)
  33. }
  34. proxies = append(proxies, ssJson{
  35. Remarks: pp.Name,
  36. Server: pp.Server,
  37. ServerPort: strconv.Itoa(pp.Port),
  38. Method: pp.Cipher,
  39. Password: pp.Password,
  40. Plugin: pp.Plugin,
  41. PluginOpts: pp.PluginOpts,
  42. })
  43. }
  44. text, err := json.Marshal(proxies)
  45. if err != nil {
  46. return ""
  47. }
  48. return string(text)
  49. }