mirror of
https://github.com/black-ant/Ant-Browser.git
synced 2026-07-14 18:48:55 +08:00
87 lines
2.6 KiB
Go
87 lines
2.6 KiB
Go
package proxy
|
|
|
|
import (
|
|
"ant-chrome/backend/internal/config"
|
|
"strings"
|
|
)
|
|
|
|
const defaultSourceRefreshIntervalM = 60
|
|
const maxSourceRefreshIntervalM = 24 * 60
|
|
|
|
func NormalizeBrowserProxies(proxies []config.BrowserProxy, generateID func() string) []config.BrowserProxy {
|
|
normalized := make([]config.BrowserProxy, 0, len(proxies)+1)
|
|
for i, item := range proxies {
|
|
proxyName := strings.TrimSpace(item.ProxyName)
|
|
proxyConfig := strings.TrimSpace(item.ProxyConfig)
|
|
if proxyName == "" || proxyConfig == "" {
|
|
continue
|
|
}
|
|
|
|
proxyID := strings.TrimSpace(item.ProxyId)
|
|
if proxyID == "" && generateID != nil {
|
|
proxyID = generateID()
|
|
}
|
|
|
|
sourceURL := strings.TrimSpace(item.SourceURL)
|
|
sourceID := strings.TrimSpace(item.SourceID)
|
|
sourceNamePrefix := strings.TrimSpace(item.SourceNamePrefix)
|
|
sourceLastRefreshAt := strings.TrimSpace(item.SourceLastRefreshAt)
|
|
sourceRefreshIntervalM := item.SourceRefreshIntervalM
|
|
if sourceRefreshIntervalM < 0 {
|
|
sourceRefreshIntervalM = 0
|
|
}
|
|
if sourceRefreshIntervalM > maxSourceRefreshIntervalM {
|
|
sourceRefreshIntervalM = maxSourceRefreshIntervalM
|
|
}
|
|
|
|
sourceAutoRefresh := item.SourceAutoRefresh && sourceURL != ""
|
|
if sourceAutoRefresh && sourceRefreshIntervalM <= 0 {
|
|
sourceRefreshIntervalM = defaultSourceRefreshIntervalM
|
|
}
|
|
if !sourceAutoRefresh {
|
|
sourceRefreshIntervalM = 0
|
|
}
|
|
if sourceURL == "" {
|
|
sourceID = ""
|
|
sourceNamePrefix = ""
|
|
sourceLastRefreshAt = ""
|
|
sourceAutoRefresh = false
|
|
sourceRefreshIntervalM = 0
|
|
}
|
|
|
|
normalized = append(normalized, config.BrowserProxy{
|
|
ProxyId: proxyID,
|
|
ProxyName: proxyName,
|
|
ProxyConfig: proxyConfig,
|
|
PreferredKernel: NormalizePreferredKernel(item.PreferredKernel),
|
|
DnsServers: strings.TrimSpace(item.DnsServers),
|
|
GroupName: strings.TrimSpace(item.GroupName),
|
|
SourceID: sourceID,
|
|
SourceURL: sourceURL,
|
|
SourceNamePrefix: sourceNamePrefix,
|
|
SourceAutoRefresh: sourceAutoRefresh,
|
|
SourceRefreshIntervalM: sourceRefreshIntervalM,
|
|
SourceLastRefreshAt: sourceLastRefreshAt,
|
|
SortOrder: i,
|
|
})
|
|
}
|
|
|
|
return ensureBuiltinDirectProxy(normalized)
|
|
}
|
|
|
|
func ensureBuiltinDirectProxy(proxies []config.BrowserProxy) []config.BrowserProxy {
|
|
const directProxyID = "__direct__"
|
|
for _, item := range proxies {
|
|
if item.ProxyId == directProxyID {
|
|
return proxies
|
|
}
|
|
}
|
|
|
|
builtin := config.BrowserProxy{
|
|
ProxyId: directProxyID,
|
|
ProxyName: "直连(不走代理)",
|
|
ProxyConfig: "direct://",
|
|
}
|
|
return append([]config.BrowserProxy{builtin}, proxies...)
|
|
}
|