diff --git a/internal/database/proxy.go b/internal/database/proxy.go index 6cb7df6..5037bdd 100644 --- a/internal/database/proxy.go +++ b/internal/database/proxy.go @@ -69,7 +69,10 @@ func GetAllProxies() (proxies proxy.ProxyList) { for _, proxyDB := range proxiesDB { if proxiesDB != nil { - proxies = append(proxies, proxy.ParseProxyFromLink(proxyDB.Link)) + p, err := proxy.ParseProxyFromLink(proxyDB.Link) + if err == nil && p != nil { + proxies = append(proxies, p) + } } } return diff --git a/pkg/getter/base.go b/pkg/getter/base.go index f25ed7b..2fa7e61 100644 --- a/pkg/getter/base.go +++ b/pkg/getter/base.go @@ -32,7 +32,10 @@ func NewGetter(sourceType string, options tool.Options) (getter Getter, err erro func StringArray2ProxyArray(origin []string) proxy.ProxyList { results := make(proxy.ProxyList, 0) for _, link := range origin { - results = append(results, proxy.ParseProxyFromLink(link)) + p, err := proxy.ParseProxyFromLink(link) + if err == nil && p != nil { + results = append(results, p) + } } return results } diff --git a/pkg/proxy/base.go b/pkg/proxy/base.go index ff9811d..7b6727b 100644 --- a/pkg/proxy/base.go +++ b/pkg/proxy/base.go @@ -61,29 +61,27 @@ type Proxy interface { SetCountry(country string) } -func ParseProxyFromLink(link string) Proxy { - var err error - var data Proxy +func ParseProxyFromLink(link string) (p Proxy, err error) { if strings.HasPrefix(link, "ssr://") { - data, err = ParseSSRLink(link) + p, err = ParseSSRLink(link) } else if strings.HasPrefix(link, "vmess://") { - data, err = ParseVmessLink(link) + p, err = ParseVmessLink(link) } else if strings.HasPrefix(link, "ss://") { - data, err = ParseSSLink(link) + p, err = ParseSSLink(link) } else if strings.HasPrefix(link, "trojan://") { - data, err = ParseTrojanLink(link) + p, err = ParseTrojanLink(link) } if err != nil { - return nil + return } - ip, country, err := geoIp.Find(data.BaseInfo().Server) + ip, country, err := geoIp.Find(p.BaseInfo().Server) if err != nil { country = "🏁 ZZ" } - data.SetCountry(country) + p.SetCountry(country) // trojan依赖域名? - if data.TypeName() != "trojan" { - data.SetIP(ip) + if p.TypeName() != "trojan" { + p.SetIP(ip) } - return data + return }