mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-11-25 03:15:19 +08:00
feat(net): support proxy configuration via config file (#1359)
* support proxy * debug * debug2 * del debug * add proxy configuration with env var fallback * comments to en * refactor(env): fallback env --------- Co-authored-by: jyxjjj <773933146@qq.com>
This commit is contained in:
@@ -25,6 +25,7 @@ func InitClient() {
|
|||||||
}),
|
}),
|
||||||
).SetTLSClientConfig(&tls.Config{InsecureSkipVerify: conf.Conf.TlsInsecureSkipVerify})
|
).SetTLSClientConfig(&tls.Config{InsecureSkipVerify: conf.Conf.TlsInsecureSkipVerify})
|
||||||
NoRedirectClient.SetHeader("user-agent", UserAgent)
|
NoRedirectClient.SetHeader("user-agent", UserAgent)
|
||||||
|
net.SetRestyProxyIfConfigured(NoRedirectClient)
|
||||||
|
|
||||||
RestyClient = NewRestyClient()
|
RestyClient = NewRestyClient()
|
||||||
HttpClient = net.NewHttpClient()
|
HttpClient = net.NewHttpClient()
|
||||||
@@ -37,5 +38,7 @@ func NewRestyClient() *resty.Client {
|
|||||||
SetRetryResetReaders(true).
|
SetRetryResetReaders(true).
|
||||||
SetTimeout(DefaultTimeout).
|
SetTimeout(DefaultTimeout).
|
||||||
SetTLSClientConfig(&tls.Config{InsecureSkipVerify: conf.Conf.TlsInsecureSkipVerify})
|
SetTLSClientConfig(&tls.Config{InsecureSkipVerify: conf.Conf.TlsInsecureSkipVerify})
|
||||||
|
|
||||||
|
net.SetRestyProxyIfConfigured(client)
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,6 +140,10 @@ func InitConfig() {
|
|||||||
log.Fatalf("create temp dir error: %+v", err)
|
log.Fatalf("create temp dir error: %+v", err)
|
||||||
}
|
}
|
||||||
log.Debugf("config: %+v", conf.Conf)
|
log.Debugf("config: %+v", conf.Conf)
|
||||||
|
|
||||||
|
// Validate and display proxy configuration status
|
||||||
|
validateProxyConfig()
|
||||||
|
|
||||||
base.InitClient()
|
base.InitClient()
|
||||||
initURL()
|
initURL()
|
||||||
}
|
}
|
||||||
@@ -179,3 +183,14 @@ func CleanTempDir() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validateProxyConfig validates proxy configuration and displays status at startup
|
||||||
|
func validateProxyConfig() {
|
||||||
|
if conf.Conf.ProxyAddress != "" {
|
||||||
|
if _, err := url.Parse(conf.Conf.ProxyAddress); err == nil {
|
||||||
|
log.Infof("Proxy enabled: %s", conf.Conf.ProxyAddress)
|
||||||
|
} else {
|
||||||
|
log.Errorf("Invalid proxy address format: %s, error: %v", conf.Conf.ProxyAddress, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ type Config struct {
|
|||||||
FTP FTP `json:"ftp" envPrefix:"FTP_"`
|
FTP FTP `json:"ftp" envPrefix:"FTP_"`
|
||||||
SFTP SFTP `json:"sftp" envPrefix:"SFTP_"`
|
SFTP SFTP `json:"sftp" envPrefix:"SFTP_"`
|
||||||
LastLaunchedVersion string `json:"last_launched_version"`
|
LastLaunchedVersion string `json:"last_launched_version"`
|
||||||
|
ProxyAddress string `json:"proxy_address" env:"PROXY_ADDRESS"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultConfig(dataDir string) *Config {
|
func DefaultConfig(dataDir string) *Config {
|
||||||
@@ -244,5 +245,6 @@ func DefaultConfig(dataDir string) *Config {
|
|||||||
Listen: ":5222",
|
Listen: ":5222",
|
||||||
},
|
},
|
||||||
LastLaunchedVersion: "",
|
LastLaunchedVersion: "",
|
||||||
|
ProxyAddress: "",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -283,11 +283,15 @@ func HttpClient() *http.Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewHttpClient() *http.Client {
|
func NewHttpClient() *http.Client {
|
||||||
|
transport := &http.Transport{
|
||||||
|
Proxy: http.ProxyFromEnvironment,
|
||||||
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: conf.Conf.TlsInsecureSkipVerify},
|
||||||
|
}
|
||||||
|
|
||||||
|
SetProxyIfConfigured(transport)
|
||||||
|
|
||||||
return &http.Client{
|
return &http.Client{
|
||||||
Timeout: time.Hour * 48,
|
Timeout: time.Hour * 48,
|
||||||
Transport: &http.Transport{
|
Transport: transport,
|
||||||
Proxy: http.ProxyFromEnvironment,
|
|
||||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: conf.Conf.TlsInsecureSkipVerify},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,15 @@ import (
|
|||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/textproto"
|
"net/textproto"
|
||||||
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/OpenListTeam/OpenList/v4/internal/conf"
|
||||||
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
|
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
|
||||||
|
|
||||||
"github.com/OpenListTeam/OpenList/v4/pkg/http_range"
|
"github.com/OpenListTeam/OpenList/v4/pkg/http_range"
|
||||||
|
"github.com/go-resty/resty/v2"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -350,3 +353,23 @@ func GetRangedHttpReader(readCloser io.ReadCloser, offset, length int64) (io.Rea
|
|||||||
// return an io.ReadCloser that is limited to `length` bytes.
|
// return an io.ReadCloser that is limited to `length` bytes.
|
||||||
return &LimitedReadCloser{readCloser, length_int}, nil
|
return &LimitedReadCloser{readCloser, length_int}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetProxyIfConfigured sets proxy for HTTP Transport if configured
|
||||||
|
func SetProxyIfConfigured(transport *http.Transport) {
|
||||||
|
// If proxy address is configured, override environment variable settings
|
||||||
|
if conf.Conf.ProxyAddress != "" {
|
||||||
|
if proxyURL, err := url.Parse(conf.Conf.ProxyAddress); err == nil {
|
||||||
|
transport.Proxy = http.ProxyURL(proxyURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRestyProxyIfConfigured sets proxy for Resty client if configured
|
||||||
|
func SetRestyProxyIfConfigured(client *resty.Client) {
|
||||||
|
// If proxy address is configured, override environment variable settings
|
||||||
|
if conf.Conf.ProxyAddress != "" {
|
||||||
|
if proxyURL, err := url.Parse(conf.Conf.ProxyAddress); err == nil {
|
||||||
|
client.SetProxy(proxyURL.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user