From 421aaecba445ffd03dc8a3db4657be05ef2c1ffd Mon Sep 17 00:00:00 2001 From: yusing Date: Sun, 8 Jun 2025 17:59:48 +0800 Subject: [PATCH] refactor: rename net/types to nettypes --- internal/api/v1/system_info.go | 4 +-- internal/homepage/route.go | 4 +-- internal/idlewatcher/types/waker.go | 4 +-- internal/idlewatcher/watcher.go | 4 +-- internal/logging/accesslog/filter.go | 4 +-- internal/logging/accesslog/filter_test.go | 4 +-- .../net/gphttp/loadbalancer/types/server.go | 12 +++---- internal/net/gphttp/middleware/bypass_test.go | 4 +-- .../net/gphttp/middleware/cidr_whitelist.go | 8 ++--- .../gphttp/middleware/cloudflare_real_ip.go | 12 +++---- .../gphttp/middleware/modify_request_test.go | 10 +++--- .../gphttp/middleware/modify_response_test.go | 6 ++-- internal/net/gphttp/middleware/real_ip.go | 6 ++-- .../net/gphttp/middleware/real_ip_test.go | 4 +-- .../gphttp/middleware/redirect_http_test.go | 6 ++-- internal/net/gphttp/middleware/test_utils.go | 10 +++--- .../net/gphttp/reverseproxy/reverse_proxy.go | 6 ++-- internal/net/types/cidr.go | 2 +- internal/net/types/stream.go | 32 ++++--------------- internal/net/types/url.go | 2 +- internal/route/reverse_proxy.go | 4 +-- internal/route/routes/route.go | 6 ++-- internal/route/rules/do.go | 6 ++-- internal/route/rules/on.go | 4 +-- internal/route/rules/validate.go | 8 ++--- internal/route/stream.go | 4 +-- 26 files changed, 79 insertions(+), 97 deletions(-) diff --git a/internal/api/v1/system_info.go b/internal/api/v1/system_info.go index e932862..fd60dfc 100644 --- a/internal/api/v1/system_info.go +++ b/internal/api/v1/system_info.go @@ -10,7 +10,7 @@ import ( "github.com/yusing/go-proxy/internal/net/gphttp" "github.com/yusing/go-proxy/internal/net/gphttp/httpheaders" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" ) func SystemInfo(cfg config.ConfigInstance, w http.ResponseWriter, r *http.Request) { @@ -41,7 +41,7 @@ func SystemInfo(cfg config.ConfigInstance, w http.ResponseWriter, r *http.Reques } gphttp.WriteBody(w, respData) } else { - rp := reverseproxy.NewReverseProxy("agent", types.NewURL(agentPkg.AgentURL), agent.Transport()) + rp := reverseproxy.NewReverseProxy("agent", nettypes.NewURL(agentPkg.AgentURL), agent.Transport()) header := r.Header.Clone() r, err := http.NewRequestWithContext(r.Context(), r.Method, agentPkg.EndpointSystemInfo+"?"+query.Encode(), nil) if err != nil { diff --git a/internal/homepage/route.go b/internal/homepage/route.go index 2c0e712..974c843 100644 --- a/internal/homepage/route.go +++ b/internal/homepage/route.go @@ -3,7 +3,7 @@ package homepage import ( "net/http" - gpnet "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/utils/pool" ) @@ -11,7 +11,7 @@ type route interface { pool.Object ProviderName() string References() []string - TargetURL() *gpnet.URL + TargetURL() *nettypes.URL } type httpRoute interface { diff --git a/internal/idlewatcher/types/waker.go b/internal/idlewatcher/types/waker.go index b06d5e1..0c7706f 100644 --- a/internal/idlewatcher/types/waker.go +++ b/internal/idlewatcher/types/waker.go @@ -3,13 +3,13 @@ package idlewatcher import ( "net/http" - net "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/watcher/health" ) type Waker interface { health.HealthMonitor http.Handler - net.Stream + nettypes.Stream Wake() error } diff --git a/internal/idlewatcher/watcher.go b/internal/idlewatcher/watcher.go index 0c2e415..0f09212 100644 --- a/internal/idlewatcher/watcher.go +++ b/internal/idlewatcher/watcher.go @@ -14,7 +14,7 @@ import ( "github.com/yusing/go-proxy/internal/idlewatcher/provider" idlewatcher "github.com/yusing/go-proxy/internal/idlewatcher/types" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" - net "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/route/routes" "github.com/yusing/go-proxy/internal/task" U "github.com/yusing/go-proxy/internal/utils" @@ -30,7 +30,7 @@ type ( routeHelper struct { route routes.Route rp *reverseproxy.ReverseProxy - stream net.Stream + stream nettypes.Stream hc health.HealthChecker } diff --git a/internal/logging/accesslog/filter.go b/internal/logging/accesslog/filter.go index 605ec54..bfe1b20 100644 --- a/internal/logging/accesslog/filter.go +++ b/internal/logging/accesslog/filter.go @@ -6,7 +6,7 @@ import ( "strings" "github.com/yusing/go-proxy/internal/gperr" - gpnet "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/utils/strutils" ) @@ -25,7 +25,7 @@ type ( } Host string CIDR struct { - gpnet.CIDR + nettypes.CIDR } ) diff --git a/internal/logging/accesslog/filter_test.go b/internal/logging/accesslog/filter_test.go index b97ed97..1a6ee69 100644 --- a/internal/logging/accesslog/filter_test.go +++ b/internal/logging/accesslog/filter_test.go @@ -6,7 +6,7 @@ import ( "testing" . "github.com/yusing/go-proxy/internal/logging/accesslog" - gpnet "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/utils/strutils" expect "github.com/yusing/go-proxy/internal/utils/testing" ) @@ -157,7 +157,7 @@ func TestHeaderFilter(t *testing.T) { } func TestCIDRFilter(t *testing.T) { - cidr := []*CIDR{{gpnet.CIDR{ + cidr := []*CIDR{{nettypes.CIDR{ IP: net.ParseIP("192.168.10.0"), Mask: net.CIDRMask(24, 32), }}} diff --git a/internal/net/gphttp/loadbalancer/types/server.go b/internal/net/gphttp/loadbalancer/types/server.go index 6d4c529..58215cc 100644 --- a/internal/net/gphttp/loadbalancer/types/server.go +++ b/internal/net/gphttp/loadbalancer/types/server.go @@ -4,7 +4,7 @@ import ( "net/http" idlewatcher "github.com/yusing/go-proxy/internal/idlewatcher/types" - net "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" U "github.com/yusing/go-proxy/internal/utils" "github.com/yusing/go-proxy/internal/watcher/health" ) @@ -14,7 +14,7 @@ type ( _ U.NoCopy name string - url *net.URL + url *nettypes.URL weight Weight http.Handler `json:"-"` @@ -26,14 +26,14 @@ type ( health.HealthMonitor Name() string Key() string - URL() *net.URL + URL() *nettypes.URL Weight() Weight SetWeight(weight Weight) TryWake() error } ) -func NewServer(name string, url *net.URL, weight Weight, handler http.Handler, healthMon health.HealthMonitor) Server { +func NewServer(name string, url *nettypes.URL, weight Weight, handler http.Handler, healthMon health.HealthMonitor) Server { srv := &server{ name: name, url: url, @@ -47,7 +47,7 @@ func NewServer(name string, url *net.URL, weight Weight, handler http.Handler, h func TestNewServer[T ~int | ~float32 | ~float64](weight T) Server { srv := &server{ weight: Weight(weight), - url: net.MustParseURL("http://localhost"), + url: nettypes.MustParseURL("http://localhost"), } return srv } @@ -56,7 +56,7 @@ func (srv *server) Name() string { return srv.name } -func (srv *server) URL() *net.URL { +func (srv *server) URL() *nettypes.URL { return srv.url } diff --git a/internal/net/gphttp/middleware/bypass_test.go b/internal/net/gphttp/middleware/bypass_test.go index c0630ca..e8d8567 100644 --- a/internal/net/gphttp/middleware/bypass_test.go +++ b/internal/net/gphttp/middleware/bypass_test.go @@ -10,7 +10,7 @@ import ( "github.com/yusing/go-proxy/internal/entrypoint" . "github.com/yusing/go-proxy/internal/net/gphttp/middleware" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/route" routeTypes "github.com/yusing/go-proxy/internal/route/types" "github.com/yusing/go-proxy/internal/task" @@ -99,7 +99,7 @@ func (f fakeRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { } func TestReverseProxyBypass(t *testing.T) { - rp := reverseproxy.NewReverseProxy("test", types.MustParseURL("http://example.com"), fakeRoundTripper{}) + rp := reverseproxy.NewReverseProxy("test", nettypes.MustParseURL("http://example.com"), fakeRoundTripper{}) err := PatchReverseProxy(rp, map[string]OptionsRaw{ "response": { "bypass": "path /test/* | path /api", diff --git a/internal/net/gphttp/middleware/cidr_whitelist.go b/internal/net/gphttp/middleware/cidr_whitelist.go index c0ba222..10da7a0 100644 --- a/internal/net/gphttp/middleware/cidr_whitelist.go +++ b/internal/net/gphttp/middleware/cidr_whitelist.go @@ -6,7 +6,7 @@ import ( "github.com/go-playground/validator/v10" gphttp "github.com/yusing/go-proxy/internal/net/gphttp" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/serialization" F "github.com/yusing/go-proxy/internal/utils/functional" ) @@ -17,8 +17,8 @@ type ( cachedAddr F.Map[string, bool] // cache for trusted IPs } CIDRWhitelistOpts struct { - Allow []*types.CIDR `validate:"min=1"` - StatusCode int `json:"status_code" aliases:"status" validate:"omitempty,status_code"` + Allow []*nettypes.CIDR `validate:"min=1"` + StatusCode int `json:"status_code" aliases:"status" validate:"omitempty,status_code"` Message string } ) @@ -26,7 +26,7 @@ type ( var ( CIDRWhiteList = NewMiddleware[cidrWhitelist]() cidrWhitelistDefaults = CIDRWhitelistOpts{ - Allow: []*types.CIDR{}, + Allow: []*nettypes.CIDR{}, StatusCode: http.StatusForbidden, Message: "IP not allowed", } diff --git a/internal/net/gphttp/middleware/cloudflare_real_ip.go b/internal/net/gphttp/middleware/cloudflare_real_ip.go index a5173bd..486bc24 100644 --- a/internal/net/gphttp/middleware/cloudflare_real_ip.go +++ b/internal/net/gphttp/middleware/cloudflare_real_ip.go @@ -12,7 +12,7 @@ import ( "github.com/rs/zerolog/log" "github.com/yusing/go-proxy/internal/common" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/utils/atomic" "github.com/yusing/go-proxy/internal/utils/strutils" ) @@ -33,7 +33,7 @@ var ( cfCIDRsMu sync.Mutex // RFC 1918. - localCIDRs = []*types.CIDR{ + localCIDRs = []*nettypes.CIDR{ {IP: net.IPv4(127, 0, 0, 1), Mask: net.IPv4Mask(255, 255, 255, 255)}, // 127.0.0.1/32 {IP: net.IPv4(10, 0, 0, 0), Mask: net.IPv4Mask(255, 0, 0, 0)}, // 10.0.0.0/8 {IP: net.IPv4(172, 16, 0, 0), Mask: net.IPv4Mask(255, 240, 0, 0)}, // 172.16.0.0/12 @@ -60,7 +60,7 @@ func (cri *cloudflareRealIP) before(w http.ResponseWriter, r *http.Request) bool return cri.realIP.before(w, r) } -func tryFetchCFCIDR() (cfCIDRs []*types.CIDR) { +func tryFetchCFCIDR() (cfCIDRs []*nettypes.CIDR) { if time.Since(cfCIDRsLastUpdate.Load()) < cfCIDRsUpdateInterval { return } @@ -75,7 +75,7 @@ func tryFetchCFCIDR() (cfCIDRs []*types.CIDR) { if common.IsTest { cfCIDRs = localCIDRs } else { - cfCIDRs = make([]*types.CIDR, 0, 30) + cfCIDRs = make([]*nettypes.CIDR, 0, 30) err := errors.Join( fetchUpdateCFIPRange(cfIPv4CIDRsEndpoint, &cfCIDRs), fetchUpdateCFIPRange(cfIPv6CIDRsEndpoint, &cfCIDRs), @@ -95,7 +95,7 @@ func tryFetchCFCIDR() (cfCIDRs []*types.CIDR) { return } -func fetchUpdateCFIPRange(endpoint string, cfCIDRs *[]*types.CIDR) error { +func fetchUpdateCFIPRange(endpoint string, cfCIDRs *[]*nettypes.CIDR) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() @@ -124,7 +124,7 @@ func fetchUpdateCFIPRange(endpoint string, cfCIDRs *[]*types.CIDR) error { return fmt.Errorf("cloudflare responeded an invalid CIDR: %s", line) } - *cfCIDRs = append(*cfCIDRs, (*types.CIDR)(cidr)) + *cfCIDRs = append(*cfCIDRs, (*nettypes.CIDR)(cidr)) } *cfCIDRs = append(*cfCIDRs, localCIDRs...) return nil diff --git a/internal/net/gphttp/middleware/modify_request_test.go b/internal/net/gphttp/middleware/modify_request_test.go index 8e69422..ef15075 100644 --- a/internal/net/gphttp/middleware/modify_request_test.go +++ b/internal/net/gphttp/middleware/modify_request_test.go @@ -7,7 +7,7 @@ import ( "slices" "testing" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" . "github.com/yusing/go-proxy/internal/utils/testing" ) @@ -51,8 +51,8 @@ func TestModifyRequest(t *testing.T) { }) t.Run("request_headers", func(t *testing.T) { - reqURL := types.MustParseURL("https://my.app/?arg_1=b") - upstreamURL := types.MustParseURL("http://test.example.com") + reqURL := nettypes.MustParseURL("https://my.app/?arg_1=b") + upstreamURL := nettypes.MustParseURL("http://test.example.com") result, err := newMiddlewareTest(ModifyRequest, &testArgs{ middlewareOpt: opts, reqURL: reqURL, @@ -128,8 +128,8 @@ func TestModifyRequest(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - reqURL := types.MustParseURL("https://my.app" + tt.path) - upstreamURL := types.MustParseURL(tt.upstreamURL) + reqURL := nettypes.MustParseURL("https://my.app" + tt.path) + upstreamURL := nettypes.MustParseURL(tt.upstreamURL) opts["add_prefix"] = tt.addPrefix result, err := newMiddlewareTest(ModifyRequest, &testArgs{ diff --git a/internal/net/gphttp/middleware/modify_response_test.go b/internal/net/gphttp/middleware/modify_response_test.go index 60922a1..26b91af 100644 --- a/internal/net/gphttp/middleware/modify_response_test.go +++ b/internal/net/gphttp/middleware/modify_response_test.go @@ -7,7 +7,7 @@ import ( "slices" "testing" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" . "github.com/yusing/go-proxy/internal/utils/testing" ) @@ -54,8 +54,8 @@ func TestModifyResponse(t *testing.T) { }) t.Run("response_headers", func(t *testing.T) { - reqURL := types.MustParseURL("https://my.app/?arg_1=b") - upstreamURL := types.MustParseURL("http://test.example.com") + reqURL := nettypes.MustParseURL("https://my.app/?arg_1=b") + upstreamURL := nettypes.MustParseURL("http://test.example.com") result, err := newMiddlewareTest(ModifyResponse, &testArgs{ middlewareOpt: opts, reqURL: reqURL, diff --git a/internal/net/gphttp/middleware/real_ip.go b/internal/net/gphttp/middleware/real_ip.go index 76ba777..26c9575 100644 --- a/internal/net/gphttp/middleware/real_ip.go +++ b/internal/net/gphttp/middleware/real_ip.go @@ -5,7 +5,7 @@ import ( "net/http" "github.com/yusing/go-proxy/internal/net/gphttp/httpheaders" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" ) // https://nginx.org/en/docs/http/ngx_http_realip_module.html @@ -16,7 +16,7 @@ type ( // Header is the name of the header to use for the real client IP Header string `validate:"required"` // From is a list of Address / CIDRs to trust - From []*types.CIDR `validate:"required,min=1"` + From []*nettypes.CIDR `validate:"required,min=1"` /* If recursive search is disabled, the original client address that matches one of the trusted addresses is replaced by @@ -33,7 +33,7 @@ var ( RealIP = NewMiddleware[realIP]() realIPOptsDefault = RealIPOpts{ Header: "X-Real-IP", - From: []*types.CIDR{}, + From: []*nettypes.CIDR{}, } ) diff --git a/internal/net/gphttp/middleware/real_ip_test.go b/internal/net/gphttp/middleware/real_ip_test.go index 331cb80..4e4af98 100644 --- a/internal/net/gphttp/middleware/real_ip_test.go +++ b/internal/net/gphttp/middleware/real_ip_test.go @@ -7,7 +7,7 @@ import ( "testing" "github.com/yusing/go-proxy/internal/net/gphttp/httpheaders" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" . "github.com/yusing/go-proxy/internal/utils/testing" ) @@ -23,7 +23,7 @@ func TestSetRealIPOpts(t *testing.T) { } optExpected := &RealIPOpts{ Header: httpheaders.HeaderXRealIP, - From: []*types.CIDR{ + From: []*nettypes.CIDR{ { IP: net.ParseIP("127.0.0.0"), Mask: net.IPv4Mask(255, 0, 0, 0), diff --git a/internal/net/gphttp/middleware/redirect_http_test.go b/internal/net/gphttp/middleware/redirect_http_test.go index eccd33c..2bad6c8 100644 --- a/internal/net/gphttp/middleware/redirect_http_test.go +++ b/internal/net/gphttp/middleware/redirect_http_test.go @@ -4,13 +4,13 @@ import ( "net/http" "testing" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" . "github.com/yusing/go-proxy/internal/utils/testing" ) func TestRedirectToHTTPs(t *testing.T) { result, err := newMiddlewareTest(RedirectHTTP, &testArgs{ - reqURL: types.MustParseURL("http://example.com"), + reqURL: nettypes.MustParseURL("http://example.com"), }) ExpectNoError(t, err) ExpectEqual(t, result.ResponseStatus, http.StatusPermanentRedirect) @@ -19,7 +19,7 @@ func TestRedirectToHTTPs(t *testing.T) { func TestNoRedirect(t *testing.T) { result, err := newMiddlewareTest(RedirectHTTP, &testArgs{ - reqURL: types.MustParseURL("https://example.com"), + reqURL: nettypes.MustParseURL("https://example.com"), }) ExpectNoError(t, err) ExpectEqual(t, result.ResponseStatus, http.StatusOK) diff --git a/internal/net/gphttp/middleware/test_utils.go b/internal/net/gphttp/middleware/test_utils.go index 2bd208b..5b813f3 100644 --- a/internal/net/gphttp/middleware/test_utils.go +++ b/internal/net/gphttp/middleware/test_utils.go @@ -11,7 +11,7 @@ import ( "github.com/yusing/go-proxy/internal/common" "github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" . "github.com/yusing/go-proxy/internal/utils/testing" ) @@ -80,11 +80,11 @@ type TestResult struct { type testArgs struct { middlewareOpt OptionsRaw - upstreamURL *types.URL + upstreamURL *nettypes.URL realRoundTrip bool - reqURL *types.URL + reqURL *nettypes.URL reqMethod string headers http.Header body []byte @@ -96,13 +96,13 @@ type testArgs struct { func (args *testArgs) setDefaults() { if args.reqURL == nil { - args.reqURL = Must(types.ParseURL("https://example.com")) + args.reqURL = Must(nettypes.ParseURL("https://example.com")) } if args.reqMethod == "" { args.reqMethod = http.MethodGet } if args.upstreamURL == nil { - args.upstreamURL = Must(types.ParseURL("https://10.0.0.1:8443")) // dummy url, no actual effect + args.upstreamURL = Must(nettypes.ParseURL("https://10.0.0.1:8443")) // dummy url, no actual effect } if args.respHeaders == nil { args.respHeaders = http.Header{} diff --git a/internal/net/gphttp/reverseproxy/reverse_proxy.go b/internal/net/gphttp/reverseproxy/reverse_proxy.go index 3ede2c3..18e7a78 100644 --- a/internal/net/gphttp/reverseproxy/reverse_proxy.go +++ b/internal/net/gphttp/reverseproxy/reverse_proxy.go @@ -28,7 +28,7 @@ import ( "github.com/rs/zerolog/log" "github.com/yusing/go-proxy/internal/logging/accesslog" "github.com/yusing/go-proxy/internal/net/gphttp/httpheaders" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" U "github.com/yusing/go-proxy/internal/utils" "golang.org/x/net/http/httpguts" ) @@ -93,7 +93,7 @@ type ReverseProxy struct { HandlerFunc http.HandlerFunc TargetName string - TargetURL *types.URL + TargetURL *nettypes.URL } func singleJoiningSlash(a, b string) string { @@ -133,7 +133,7 @@ func joinURLPath(a, b *url.URL) (path, rawpath string) { // URLs to the scheme, host, and base path provided in target. If the // target's path is "/base" and the incoming request was for "/dir", // the target request will be for /base/dir. -func NewReverseProxy(name string, target *types.URL, transport http.RoundTripper) *ReverseProxy { +func NewReverseProxy(name string, target *nettypes.URL, transport http.RoundTripper) *ReverseProxy { if transport == nil { panic("nil transport") } diff --git a/internal/net/types/cidr.go b/internal/net/types/cidr.go index 67ca297..d9959a7 100644 --- a/internal/net/types/cidr.go +++ b/internal/net/types/cidr.go @@ -1,4 +1,4 @@ -package types +package nettypes import ( "net" diff --git a/internal/net/types/stream.go b/internal/net/types/stream.go index 2892a5f..003d554 100644 --- a/internal/net/types/stream.go +++ b/internal/net/types/stream.go @@ -1,32 +1,14 @@ -package types +package nettypes import ( - "fmt" + "context" "net" ) -type ( - Stream interface { - fmt.Stringer - StreamListener - Setup() error - Handle(conn StreamConn) error - } - StreamListener interface { - Addr() net.Addr - Accept() (StreamConn, error) - Close() error - } - StreamConn any - NetListenerWrapper struct { - net.Listener - } -) - -func NetListener(l net.Listener) StreamListener { - return NetListenerWrapper{Listener: l} +type Stream interface { + ListenAndServe(ctx context.Context, preDial PreDialFunc) + LocalAddr() net.Addr + Close() error } -func (l NetListenerWrapper) Accept() (StreamConn, error) { - return l.Listener.Accept() -} +type PreDialFunc func(ctx context.Context) error diff --git a/internal/net/types/url.go b/internal/net/types/url.go index a704813..75b9b61 100644 --- a/internal/net/types/url.go +++ b/internal/net/types/url.go @@ -1,4 +1,4 @@ -package types +package nettypes import ( urlPkg "net/url" diff --git a/internal/route/reverse_proxy.go b/internal/route/reverse_proxy.go index dc8491e..b3ad7cf 100755 --- a/internal/route/reverse_proxy.go +++ b/internal/route/reverse_proxy.go @@ -16,7 +16,7 @@ import ( loadbalance "github.com/yusing/go-proxy/internal/net/gphttp/loadbalancer/types" "github.com/yusing/go-proxy/internal/net/gphttp/middleware" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/route/routes" "github.com/yusing/go-proxy/internal/task" "github.com/yusing/go-proxy/internal/watcher/health/monitor" @@ -42,7 +42,7 @@ func NewReverseProxyRoute(base *Route) (*ReveseProxyRoute, gperr.Error) { a := base.Agent() if a != nil { trans = a.Transport() - proxyURL = types.NewURL(agent.HTTPProxyURL) + proxyURL = nettypes.NewURL(agent.HTTPProxyURL) } else { trans = gphttp.NewTransport() if httpConfig.NoTLSVerify { diff --git a/internal/route/routes/route.go b/internal/route/routes/route.go index 877e325..30e1b7f 100644 --- a/internal/route/routes/route.go +++ b/internal/route/routes/route.go @@ -7,13 +7,13 @@ import ( "github.com/yusing/go-proxy/internal/docker" "github.com/yusing/go-proxy/internal/homepage" idlewatcher "github.com/yusing/go-proxy/internal/idlewatcher/types" - net "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/task" "github.com/yusing/go-proxy/internal/utils/pool" "github.com/yusing/go-proxy/internal/watcher/health" loadbalance "github.com/yusing/go-proxy/internal/net/gphttp/loadbalancer/types" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" + nettypes "github.com/yusing/go-proxy/internal/net/types" ) type ( @@ -24,7 +24,7 @@ type ( pool.Object ProviderName() string GetProvider() Provider - TargetURL() *net.URL + TargetURL() *nettypes.URL HealthMonitor() health.HealthMonitor SetHealthMonitor(m health.HealthMonitor) References() []string @@ -57,7 +57,7 @@ type ( } StreamRoute interface { Route - net.Stream + nettypes.Stream } Provider interface { GetRoute(alias string) (r Route, ok bool) diff --git a/internal/route/rules/do.go b/internal/route/rules/do.go index f00c20d..41cce64 100644 --- a/internal/route/rules/do.go +++ b/internal/route/rules/do.go @@ -9,7 +9,7 @@ import ( "github.com/yusing/go-proxy/internal/gperr" gphttp "github.com/yusing/go-proxy/internal/net/gphttp" "github.com/yusing/go-proxy/internal/net/gphttp/reverseproxy" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/utils/strutils" ) @@ -95,7 +95,7 @@ var commands = map[string]struct { }, validate: validateURL, build: func(args any) CommandHandler { - target := args.(*types.URL).String() + target := args.(*nettypes.URL).String() return ReturningCommand(func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, target, http.StatusTemporaryRedirect) }) @@ -160,7 +160,7 @@ var commands = map[string]struct { }, validate: validateAbsoluteURL, build: func(args any) CommandHandler { - target := args.(*types.URL) + target := args.(*nettypes.URL) if target.Scheme == "" { target.Scheme = "http" } diff --git a/internal/route/rules/on.go b/internal/route/rules/on.go index 2eb776c..1ef6928 100644 --- a/internal/route/rules/on.go +++ b/internal/route/rules/on.go @@ -8,7 +8,7 @@ import ( "github.com/gobwas/glob" "github.com/yusing/go-proxy/internal/gperr" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/route/routes" "github.com/yusing/go-proxy/internal/utils/strutils" ) @@ -205,7 +205,7 @@ var checkers = map[string]struct { }, validate: validateCIDR, builder: func(args any) CheckFunc { - cidr := args.(types.CIDR) + cidr := args.(nettypes.CIDR) return func(cached Cache, r *http.Request) bool { ip := cached.GetRemoteIP(r) if ip == nil { diff --git a/internal/route/rules/validate.go b/internal/route/rules/validate.go index 266e01d..7729a36 100644 --- a/internal/route/rules/validate.go +++ b/internal/route/rules/validate.go @@ -10,7 +10,7 @@ import ( "github.com/gobwas/glob" "github.com/yusing/go-proxy/internal/gperr" gphttp "github.com/yusing/go-proxy/internal/net/gphttp" - "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" ) type ( @@ -62,7 +62,7 @@ func validateURL(args []string) (any, gperr.Error) { if len(args) != 1 { return nil, ErrExpectOneArg } - u, err := types.ParseURL(args[0]) + u, err := nettypes.ParseURL(args[0]) if err != nil { return nil, ErrInvalidArguments.With(err) } @@ -74,7 +74,7 @@ func validateAbsoluteURL(args []string) (any, gperr.Error) { if len(args) != 1 { return nil, ErrExpectOneArg } - u, err := types.ParseURL(args[0]) + u, err := nettypes.ParseURL(args[0]) if err != nil { return nil, ErrInvalidArguments.With(err) } @@ -95,7 +95,7 @@ func validateCIDR(args []string) (any, gperr.Error) { if !strings.Contains(args[0], "/") { args[0] += "/32" } - cidr, err := types.ParseCIDR(args[0]) + cidr, err := nettypes.ParseCIDR(args[0]) if err != nil { return nil, ErrInvalidArguments.With(err) } diff --git a/internal/route/stream.go b/internal/route/stream.go index dddcdf7..31e5c07 100755 --- a/internal/route/stream.go +++ b/internal/route/stream.go @@ -8,7 +8,7 @@ import ( "github.com/rs/zerolog/log" "github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/idlewatcher" - net "github.com/yusing/go-proxy/internal/net/types" + nettypes "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/route/routes" "github.com/yusing/go-proxy/internal/task" "github.com/yusing/go-proxy/internal/watcher/health/monitor" @@ -17,7 +17,7 @@ import ( // TODO: support stream load balance. type StreamRoute struct { *Route - net.Stream `json:"-"` + nettypes.Stream `json:"-"` l zerolog.Logger }