enhance: proxy settings

This commit is contained in:
Jacky 2024-10-07 11:06:00 +08:00
parent 957d4754f7
commit deda31a6e1
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
15 changed files with 351 additions and 261 deletions

View file

@ -0,0 +1,44 @@
package transport
import (
"crypto/tls"
"github.com/0xJacky/Nginx-UI/settings"
"net/http"
"net/url"
)
// NewTransport creates a new http.Transport with the provided options.
func NewTransport(options ...func(transport *http.Transport) error) (t *http.Transport, err error) {
t = &http.Transport{
Proxy: http.ProxyFromEnvironment,
TLSClientConfig: &tls.Config{InsecureSkipVerify: settings.ServerSettings.InsecureSkipVerify},
}
for _, option := range options {
if err := option(t); err != nil {
return nil, err
}
}
return
}
// WithProxy returns a function that sets the proxy of the http.Transport to the provided proxy URL.
func WithProxy(proxyUrl string) func(transport *http.Transport) error {
if proxyUrl == "" {
return func(transport *http.Transport) error {
return nil
}
}
proxy, err := url.Parse(proxyUrl)
if err != nil {
return func(transport *http.Transport) error {
return err
}
}
return func(transport *http.Transport) error {
transport.Proxy = http.ProxyURL(proxy)
return nil
}
}

View file

@ -0,0 +1,42 @@
package transport
import (
"net/http"
"net/url"
"testing"
"github.com/0xJacky/Nginx-UI/settings"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCreatesTransportWithDefaultSettings(t *testing.T) {
transport, err := NewTransport()
require.NoError(t, err)
assert.NotNil(t, transport)
assert.ObjectsAreEqual(http.ProxyFromEnvironment, transport.Proxy)
assert.Equal(t, settings.ServerSettings.InsecureSkipVerify, transport.TLSClientConfig.InsecureSkipVerify)
}
func TestCreatesTransportWithCustomProxy(t *testing.T) {
proxyUrl := "https://proxy.example.com"
transport, err := NewTransport(WithProxy(proxyUrl))
require.NoError(t, err)
assert.NotNil(t, transport)
parsedProxy, _ := url.Parse(proxyUrl)
assert.ObjectsAreEqual(http.ProxyURL(parsedProxy), transport.Proxy)
}
func TestCreatesTransportWithInvalidProxyUrl(t *testing.T) {
invalidProxyUrl := "https://[::1]:namedport"
transport, err := NewTransport(WithProxy(invalidProxyUrl))
assert.Error(t, err)
assert.Nil(t, transport)
}
func TestCreatesTransportWithEmptyProxyUrl(t *testing.T) {
transport, err := NewTransport(WithProxy(""))
require.NoError(t, err)
assert.NotNil(t, transport)
assert.ObjectsAreEqual(http.ProxyFromEnvironment, transport.Proxy)
}