diff options
author | 2023-08-01 19:50:17 +0200 | |
---|---|---|
committer | 2023-08-01 18:50:17 +0100 | |
commit | 2be83fdca5c440d45b8cd92bda9315757463d6c7 (patch) | |
tree | 041eb0ef390f2995cd243206c5f0cc8fb3d66488 /internal/httpclient/client.go | |
parent | [feature] Set timezone in Docker using TZ env variable (#2050) (diff) | |
download | gotosocial-2be83fdca5c440d45b8cd92bda9315757463d6c7.tar.xz |
[feature] Allow users to skip http client tls verification for testing purposes (with appropriately loud warnings) (#2052)
Diffstat (limited to 'internal/httpclient/client.go')
-rw-r--r-- | internal/httpclient/client.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/internal/httpclient/client.go b/internal/httpclient/client.go index 18bbe1ee9..f5701d6fa 100644 --- a/internal/httpclient/client.go +++ b/internal/httpclient/client.go @@ -19,6 +19,7 @@ package httpclient import ( "context" + "crypto/tls" "errors" "fmt" "io" @@ -86,6 +87,14 @@ type Config struct { // BlockRanges blocks outgoing communiciations to given IP nets. BlockRanges []netip.Prefix + + // TLSInsecureSkipVerify can be set to true to + // skip validation of remote TLS certificates. + // + // THIS SHOULD BE USED FOR TESTING ONLY, IF YOU + // TURN THIS ON WHILE RUNNING IN PRODUCTION YOU + // ARE LEAVING YOUR SERVER WIDE OPEN TO ATTACKS! + TLSInsecureSkipVerify bool } // Client wraps an underlying http.Client{} to provide the following: @@ -139,11 +148,26 @@ func New(cfg Config) *Client { c.client.Timeout = cfg.Timeout c.bodyMax = cfg.MaxBodySize + // Prepare TLS config for transport. + tlsClientConfig := &tls.Config{ + InsecureSkipVerify: cfg.TLSInsecureSkipVerify, //nolint:gosec + } + + if tlsClientConfig.InsecureSkipVerify { + // Warn against playing silly buggers. + log.Warn(nil, "http-client.tls-insecure-skip-verify was set to TRUE. "+ + "*****THIS SHOULD BE USED FOR TESTING ONLY, IF YOU TURN THIS ON WHILE "+ + "RUNNING IN PRODUCTION YOU ARE LEAVING YOUR SERVER WIDE OPEN TO ATTACKS! "+ + "IF IN DOUBT, STOP YOUR SERVER *NOW* AND ADJUST YOUR CONFIGURATION!*****", + ) + } + // Set underlying HTTP client roundtripper. c.client.Transport = &http.Transport{ Proxy: http.ProxyFromEnvironment, ForceAttemptHTTP2: true, DialContext: d.DialContext, + TLSClientConfig: tlsClientConfig, MaxIdleConns: cfg.MaxIdleConns, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, |