diff --git a/internal/basecomponent/base.go b/internal/basecomponent/base.go index a4832372..0fc95e82 100644 --- a/internal/basecomponent/base.go +++ b/internal/basecomponent/base.go @@ -16,6 +16,7 @@ package basecomponent import ( "database/sql" + "fmt" "io" "net/http" "net/url" @@ -94,7 +95,16 @@ func NewBaseDendrite(cfg *config.Dendrite, componentName string, enableHTTPAPIs logrus.WithError(err).Warnf("Failed to create cache") } + client := http.Client{Timeout: HTTPClientTimeout} + if cfg.Proxy != nil { + client.Transport = &http.Transport{Proxy: http.ProxyURL(&url.URL{ + Scheme: cfg.Proxy.Protocol, + Host: fmt.Sprintf("%s:%d", cfg.Proxy.Host, cfg.Proxy.Port), + })} + } + httpmux := mux.NewRouter() + return &BaseDendrite{ componentName: componentName, EnableHTTPAPIs: enableHTTPAPIs, @@ -103,7 +113,7 @@ func NewBaseDendrite(cfg *config.Dendrite, componentName string, enableHTTPAPIs ImmutableCache: cache, PublicAPIMux: httpmux.PathPrefix(httpapis.PublicPathPrefix).Subrouter().UseEncodedPath(), InternalAPIMux: httpmux.PathPrefix(httpapis.InternalPathPrefix).Subrouter().UseEncodedPath(), - httpClient: &http.Client{Timeout: HTTPClientTimeout}, + httpClient: &client, KafkaConsumer: kafkaConsumer, KafkaProducer: kafkaProducer, } diff --git a/internal/config/config.go b/internal/config/config.go index a20cc0ea..59799585 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -268,6 +268,16 @@ type Dendrite struct { // The config for logging informations. Each hook will be added to logrus. Logging []LogrusHook `yaml:"logging"` + // The config for setting a proxy to use for server->server requests + Proxy *struct { + // The protocol for the proxy (http / https / socks5) + Protocol string `yaml:"protocol"` + // The host where the proxy is listening + Host string `yaml:"host"` + // The port on which the proxy is listening + Port uint16 `yaml:"port"` + } `yaml:"proxy"` + // Any information derived from the configuration options for later use. Derived struct { Registration struct {