From 6d13060aeb4b0692eb9f0d6c28eaa79903680751 Mon Sep 17 00:00:00 2001 From: Chang lue Tsen Date: Tue, 29 Apr 2025 17:02:17 +0900 Subject: [PATCH] fix(proxy): improve proxy removal logic in build functions --- pkg/adapter/surfboard/build.go | 8 ++++++++ pkg/adapter/surge/surge.go | 7 +++++++ pkg/adapter/uilts.go | 14 +------------- pkg/tool/slice.go | 12 ++++++++++++ 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/pkg/adapter/surfboard/build.go b/pkg/adapter/surfboard/build.go index bc42196..db3c63c 100644 --- a/pkg/adapter/surfboard/build.go +++ b/pkg/adapter/surfboard/build.go @@ -22,13 +22,21 @@ var shadowsocksSupportMethod = []string{"aes-128-gcm", "aes-192-gcm", "aes-256-g func BuildSurfboard(servers proxy.Adapter, siteName string, user UserInfo) []byte { var proxies, proxyGroup string + var removed []string for _, node := range servers.Proxies { if uri := buildProxy(node, user.UUID); uri != "" { proxies += uri + } else { + removed = append(removed, node.Name) } } for _, group := range servers.Group { + + if len(removed) > 0 { + group.Proxies = tool.RemoveStringElement(group.Proxies, removed...) + } + if group.Type == proxy.GroupTypeSelect { proxyGroup += fmt.Sprintf("%s = select, %s", group.Name, strings.Join(group.Proxies, ", ")) + "\r\n" } else if group.Type == proxy.GroupTypeURLTest { diff --git a/pkg/adapter/surge/surge.go b/pkg/adapter/surge/surge.go index ba16bf1..4c075be 100644 --- a/pkg/adapter/surge/surge.go +++ b/pkg/adapter/surge/surge.go @@ -4,6 +4,7 @@ import ( "bytes" "embed" "fmt" + "github.com/perfect-panel/server/pkg/tool" "net/url" "strings" "text/template" @@ -40,6 +41,7 @@ func NewSurge(adapter proxy.Adapter) *Surge { func (m *Surge) Build(uuid, siteName string, user UserInfo) []byte { var proxies, proxyGroup, rules string + var removed []string for _, p := range m.Adapter.Proxies { switch p.Protocol { @@ -51,9 +53,14 @@ func (m *Surge) Build(uuid, siteName string, user UserInfo) []byte { proxies += buildHysteria2(p, uuid) case "vmess": proxies += buildVMess(p, uuid) + default: + removed = append(removed, p.Name) } } for _, group := range m.Adapter.Group { + if len(removed) > 0 { + group.Proxies = tool.RemoveStringElement(group.Proxies, removed...) + } if group.Type == proxy.GroupTypeSelect { proxyGroup += fmt.Sprintf("%s = select, %s", group.Name, strings.Join(group.Proxies, ", ")) + "\r\n" } else if group.Type == proxy.GroupTypeURLTest { diff --git a/pkg/adapter/uilts.go b/pkg/adapter/uilts.go index 8550097..ab5e008 100644 --- a/pkg/adapter/uilts.go +++ b/pkg/adapter/uilts.go @@ -196,24 +196,12 @@ func RemoveEmptyString(arr []string) []string { return result } -// RemoveElement 移除指定元素 -func RemoveElement(arr []string, element ...string) []string { - var result []string - for _, str := range arr { - if !tool.Contains(element, str) { - logger.Infof("Remove Element: %s", str) - result = append(result, str) - } - } - return result -} - func RemoveEmptyGroup(arr []proxy.Group) []proxy.Group { var result []proxy.Group var removeNames []string for _, group := range arr { if group.Name == "手动选择" { - group.Proxies = RemoveElement(group.Proxies, removeNames...) + group.Proxies = tool.RemoveStringElement(group.Proxies, removeNames...) } if len(group.Proxies) > 0 { result = append(result, group) diff --git a/pkg/tool/slice.go b/pkg/tool/slice.go index 50f683d..8b84ef9 100644 --- a/pkg/tool/slice.go +++ b/pkg/tool/slice.go @@ -128,3 +128,15 @@ func Contains[T comparable](slice []T, target T) bool { } return false } + +// RemoveStringElement 移除指定元素 +func RemoveStringElement(arr []string, element ...string) []string { + var result []string + for _, str := range arr { + if !Contains(element, str) { + logger.Infof("Remove Element: %s", str) + result = append(result, str) + } + } + return result +}