mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-05-29 16:39:35 +00:00
Add a panelProxy setting that routes the panel's self-initiated HTTP requests (geo updates, Xray version/core download, panel update check) through an admin-configured socks5/http(s) proxy, to bypass server-side filtering of GitHub/Telegram. The Telegram bot falls back to it when tgBotProxy is empty (socks5 only). New util/netproxy.NewHTTPClient builds the proxied client. Also fix the Mixed-inbound SOCKS/HTTP share URLs that had host:port and user:pass in the wrong order, and consolidate the Telegram settings tab (move API server into the general tab, drop the empty Proxy & Server tab).
55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package netproxy
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNewHTTPClient(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
proxyURL string
|
|
wantErr bool
|
|
wantProxy bool
|
|
wantDial bool
|
|
}{
|
|
{name: "empty returns direct client", proxyURL: ""},
|
|
{name: "socks5 sets custom dialer", proxyURL: "socks5://127.0.0.1:1080", wantDial: true},
|
|
{name: "socks5 with auth", proxyURL: "socks5://user:pass@127.0.0.1:1080", wantDial: true},
|
|
{name: "http sets transport proxy", proxyURL: "http://127.0.0.1:8080", wantProxy: true},
|
|
{name: "https sets transport proxy", proxyURL: "https://127.0.0.1:8080", wantProxy: true},
|
|
{name: "unsupported scheme errors", proxyURL: "ftp://127.0.0.1:21", wantErr: true},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
client, err := NewHTTPClient(tc.proxyURL, 5*time.Second)
|
|
if tc.wantErr {
|
|
if err == nil {
|
|
t.Fatalf("expected error for %q, got nil", tc.proxyURL)
|
|
}
|
|
return
|
|
}
|
|
if err != nil {
|
|
t.Fatalf("unexpected error for %q: %v", tc.proxyURL, err)
|
|
}
|
|
if client.Timeout != 5*time.Second {
|
|
t.Errorf("timeout = %v, want 5s", client.Timeout)
|
|
}
|
|
if tc.wantProxy {
|
|
transport, ok := client.Transport.(*http.Transport)
|
|
if !ok || transport.Proxy == nil {
|
|
t.Errorf("expected transport with Proxy set for %q", tc.proxyURL)
|
|
}
|
|
}
|
|
if tc.wantDial {
|
|
transport, ok := client.Transport.(*http.Transport)
|
|
if !ok || transport.DialContext == nil {
|
|
t.Errorf("expected transport with DialContext set for %q", tc.proxyURL)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|