feat(proxyd): ability to add additional headers to backend requests (#8134)

This commit is contained in:
Danyal Prout 2023-11-11 03:52:09 -06:00 committed by GitHub
parent 798878e455
commit 7175c46a00
3 changed files with 35 additions and 11 deletions

@ -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