mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 18:35:51 +02:00
enhance: proxy settings
This commit is contained in:
parent
957d4754f7
commit
deda31a6e1
15 changed files with 351 additions and 261 deletions
44
internal/transport/transport.go
Normal file
44
internal/transport/transport.go
Normal 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
|
||||
}
|
||||
}
|
42
internal/transport/transport_test.go
Normal file
42
internal/transport/transport_test.go
Normal 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)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue