feat(proxyd): ability to add additional headers to backend requests (#8134)
This commit is contained in:
parent
798878e455
commit
7175c46a00
@ -139,6 +139,7 @@ type Backend struct {
|
||||
wsURL string
|
||||
authUsername string
|
||||
authPassword string
|
||||
headers map[string]string
|
||||
client *LimitedHTTPClient
|
||||
dialer *websocket.Dialer
|
||||
maxRetries int
|
||||
@ -170,6 +171,12 @@ func WithBasicAuth(username, password string) BackendOpt {
|
||||
}
|
||||
}
|
||||
|
||||
func WithHeaders(headers map[string]string) BackendOpt {
|
||||
return func(b *Backend) {
|
||||
b.headers = headers
|
||||
}
|
||||
}
|
||||
|
||||
func WithTimeout(timeout time.Duration) BackendOpt {
|
||||
return func(b *Backend) {
|
||||
b.client.Timeout = timeout
|
||||
@ -535,6 +542,10 @@ func (b *Backend) doForward(ctx context.Context, rpcReqs []*RPCReq, isBatch bool
|
||||
httpReq.Header.Set("content-type", "application/json")
|
||||
httpReq.Header.Set("X-Forwarded-For", xForwardedFor)
|
||||
|
||||
for name, value := range b.headers {
|
||||
httpReq.Header.Set(name, value)
|
||||
}
|
||||
|
||||
start := time.Now()
|
||||
httpRes, err := b.client.DoLimited(httpReq)
|
||||
if err != nil {
|
||||
|
@ -83,17 +83,18 @@ type BackendOptions struct {
|
||||
}
|
||||
|
||||
type BackendConfig struct {
|
||||
Username string `toml:"username"`
|
||||
Password string `toml:"password"`
|
||||
RPCURL string `toml:"rpc_url"`
|
||||
WSURL string `toml:"ws_url"`
|
||||
WSPort int `toml:"ws_port"`
|
||||
MaxRPS int `toml:"max_rps"`
|
||||
MaxWSConns int `toml:"max_ws_conns"`
|
||||
CAFile string `toml:"ca_file"`
|
||||
ClientCertFile string `toml:"client_cert_file"`
|
||||
ClientKeyFile string `toml:"client_key_file"`
|
||||
StripTrailingXFF bool `toml:"strip_trailing_xff"`
|
||||
Username string `toml:"username"`
|
||||
Password string `toml:"password"`
|
||||
RPCURL string `toml:"rpc_url"`
|
||||
WSURL string `toml:"ws_url"`
|
||||
WSPort int `toml:"ws_port"`
|
||||
MaxRPS int `toml:"max_rps"`
|
||||
MaxWSConns int `toml:"max_ws_conns"`
|
||||
CAFile string `toml:"ca_file"`
|
||||
ClientCertFile string `toml:"client_cert_file"`
|
||||
ClientKeyFile string `toml:"client_key_file"`
|
||||
StripTrailingXFF bool `toml:"strip_trailing_xff"`
|
||||
Headers map[string]string `toml:"headers"`
|
||||
|
||||
ConsensusSkipPeerCountCheck bool `toml:"consensus_skip_peer_count"`
|
||||
ConsensusForcedCandidate bool `toml:"consensus_forced_candidate"`
|
||||
|
@ -130,6 +130,18 @@ func Start(config *Config) (*Server, func(), error) {
|
||||
}
|
||||
opts = append(opts, WithBasicAuth(cfg.Username, passwordVal))
|
||||
}
|
||||
|
||||
headers := map[string]string{}
|
||||
for headerName, headerValue := range cfg.Headers {
|
||||
headerValue, err := ReadFromEnvOrConfig(headerValue)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
headers[headerName] = headerValue
|
||||
}
|
||||
opts = append(opts, WithHeaders(headers))
|
||||
|
||||
tlsConfig, err := configureBackendTLS(cfg)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
|
Loading…
Reference in New Issue
Block a user