try surge list

This commit is contained in:
zu1k
2020-08-14 10:24:15 +08:00
parent 5329a7b545
commit 5222a11d20
10 changed files with 97 additions and 10 deletions

View File

@@ -13,6 +13,7 @@ var router *gin.Engine
func setupRouter() {
router = gin.Default()
router.StaticFile("/", "example/clash.html")
router.StaticFile("/clash", "example/clash.html")
router.StaticFile("/clash/config", "example/clash-config.yaml")
router.GET("/clash/proxies", func(c *gin.Context) {
@@ -25,6 +26,16 @@ func setupRouter() {
}
c.String(200, text)
})
router.GET("/surge/proxies", func(c *gin.Context) {
text := cache.GetString("surgeproxies")
if text == "" {
proxies := cache.GetProxies()
surge := provider.Surge{Proxies: proxies}
text = surge.Provide()
cache.SetString("surgeproxies", text)
}
c.String(200, text)
})
}
func Run() {

View File

@@ -37,6 +37,7 @@ func Crawl() {
log.Println("Crawl node count:", num)
cache.SetProxies(proxies)
cache.SetString("clashproxies", provider.Clash{Proxies: proxies}.Provide())
cache.SetString("surgeproxies", provider.Surge{Proxies: proxies}.Provide())
}
func CrawlGo() {
@@ -68,6 +69,7 @@ func CrawlGo() {
log.Println("CrawlGo node count:", num)
cache.SetProxies(proxies)
cache.SetString("clashproxies", provider.Clash{Proxies: proxies}.Provide())
cache.SetString("surgeproxies", provider.Surge{Proxies: proxies}.Provide())
}
func FetchNewConfigFileThenInit() {

2
go.mod
View File

@@ -31,5 +31,5 @@ require (
google.golang.org/appengine v1.6.6 // indirect
google.golang.org/protobuf v1.25.0 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
gopkg.in/yaml.v2 v2.3.0
)

View File

@@ -3,3 +3,12 @@ package provider
type Provider interface {
Provide() string
}
func checkInList(list []string, item string) bool {
for _, i := range list {
if item == i {
return true
}
}
return false
}

View File

@@ -46,15 +46,6 @@ func checkClashSupport(p proxy.Proxy) bool {
return false
}
func checkInList(list []string, item string) bool {
for _, i := range list {
if item == i {
return true
}
}
return false
}
var ssrCipherList = []string{
"aes-128-cfb",
"aes-192-cfb",

37
provider/surge.go Normal file
View File

@@ -0,0 +1,37 @@
package provider
import (
"strings"
"github.com/zu1k/proxypool/proxy"
)
type Surge struct {
Proxies []proxy.Proxy `yaml:"proxies"`
}
func (s Surge) Provide() string {
var resultBuilder strings.Builder
for _, p := range s.Proxies {
if checkClashSupport(p) {
resultBuilder.WriteString(p.ToSurge() + "\n")
}
}
return resultBuilder.String()
}
func checkSurgeSupport(p proxy.Proxy) bool {
switch p.(type) {
case *proxy.ShadowsocksR:
return false
case *proxy.Vmess:
return true
case *proxy.Shadowsocks:
return true
default:
return false
}
return false
}

View File

@@ -11,6 +11,7 @@ type Base struct {
type Proxy interface {
String() string
ToClash() string
ToSurge() string
Identifier() string
SetName(name string)
}

View File

@@ -3,6 +3,7 @@ package proxy
import (
"encoding/json"
"errors"
"fmt"
"math/rand"
"net"
"net/url"
@@ -45,6 +46,17 @@ func (ss Shadowsocks) ToClash() string {
return "- " + string(data)
}
func (ss Shadowsocks) ToSurge() string {
// node1 = ss, server, port, encrypt-method=, password=, obfs=, obfs-host=, udp-relay=false
if ss.Plugin == "obfs" {
return fmt.Sprintf("%s = ss, %s, %d, encrypt-method=%s, password=%s, obfs=%s, obfs-host=%s, udp-relay=false",
ss.Name, ss.Server, ss.Port, ss.Cipher, ss.Password, ss.PluginOpts["mode"], ss.PluginOpts["host"])
} else {
return fmt.Sprintf("%s = ss, %s, %d, encrypt-method=%s, password=%s, udp-relay=false",
ss.Name, ss.Server, ss.Port, ss.Cipher, ss.Password)
}
}
func (ss *Shadowsocks) SetName(name string) {
ss.Name = name
}

View File

@@ -53,6 +53,10 @@ func (ssr ShadowsocksR) ToClash() string {
return "- " + string(data)
}
func (ssr ShadowsocksR) ToSurge() string {
return ""
}
func (ssr *ShadowsocksR) SetName(name string) {
ssr.Name = name
}

View File

@@ -3,6 +3,7 @@ package proxy
import (
"encoding/json"
"errors"
"fmt"
"math/rand"
"net"
"net/url"
@@ -58,6 +59,25 @@ func (v Vmess) ToClash() string {
return "- " + string(data)
}
func (v Vmess) ToSurge() string {
// node2 = vmess, server, port, username=, ws=true, ws-path=, ws-headers=
if v.Network == "ws" {
wsHeasers := ""
for k, v := range v.WSHeaders {
if wsHeasers == "" {
wsHeasers = k + ":" + v
} else {
wsHeasers += "|" + k + ":" + v
}
}
return fmt.Sprintf("%s = vmess, %s, %d, username=%s, ws=true, tls=%t, ws-path=%s, ws-headers=%s",
v.Name, v.Server, v.Port, v.UUID, v.TLS, v.WSPath, wsHeasers)
} else {
return fmt.Sprintf("%s = vmess, %s, %d, username=%s, tls=%t",
v.Name, v.Server, v.Port, v.UUID, v.TLS)
}
}
func (v *Vmess) SetName(name string) {
v.Name = name
}