summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2023-08-01 19:50:17 +0200
committerLibravatar GitHub <noreply@github.com>2023-08-01 18:50:17 +0100
commit2be83fdca5c440d45b8cd92bda9315757463d6c7 (patch)
tree041eb0ef390f2995cd243206c5f0cc8fb3d66488 /internal
parent[feature] Set timezone in Docker using TZ env variable (#2050) (diff)
downloadgotosocial-2be83fdca5c440d45b8cd92bda9315757463d6c7.tar.xz
[feature] Allow users to skip http client tls verification for testing purposes (with appropriately loud warnings) (#2052)
Diffstat (limited to 'internal')
-rw-r--r--internal/config/config.go7
-rw-r--r--internal/config/defaults.go7
-rw-r--r--internal/config/flags.go1
-rw-r--r--internal/config/helpers.gen.go25
-rw-r--r--internal/httpclient/client.go24
5 files changed, 58 insertions, 6 deletions
diff --git a/internal/config/config.go b/internal/config/config.go
index 9397379b8..7f09b5fc1 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -168,9 +168,10 @@ type Configuration struct {
}
type HTTPClientConfiguration struct {
- AllowIPs []string `name:"allow-ips"`
- BlockIPs []string `name:"block-ips"`
- Timeout time.Duration `name:"timeout"`
+ AllowIPs []string `name:"allow-ips"`
+ BlockIPs []string `name:"block-ips"`
+ Timeout time.Duration `name:"timeout"`
+ TLSInsecureSkipVerify bool `name:"tls-insecure-skip-verify"`
}
type CacheConfiguration struct {
diff --git a/internal/config/defaults.go b/internal/config/defaults.go
index 7729840f0..e8cb39325 100644
--- a/internal/config/defaults.go
+++ b/internal/config/defaults.go
@@ -234,9 +234,10 @@ var Defaults = Configuration{
},
HTTPClient: HTTPClientConfiguration{
- AllowIPs: make([]string, 0),
- BlockIPs: make([]string, 0),
- Timeout: 10 * time.Second,
+ AllowIPs: make([]string, 0),
+ BlockIPs: make([]string, 0),
+ Timeout: 10 * time.Second,
+ TLSInsecureSkipVerify: false,
},
AdminMediaPruneDryRun: true,
diff --git a/internal/config/flags.go b/internal/config/flags.go
index c42b5c7b2..321400252 100644
--- a/internal/config/flags.go
+++ b/internal/config/flags.go
@@ -60,6 +60,7 @@ func (s *ConfigState) AddGlobalFlags(cmd *cobra.Command) {
cmd.PersistentFlags().StringSlice(HTTPClientAllowIPsFlag(), cfg.HTTPClient.AllowIPs, "no usage string")
cmd.PersistentFlags().StringSlice(HTTPClientBlockIPsFlag(), cfg.HTTPClient.BlockIPs, "no usage string")
cmd.PersistentFlags().Duration(HTTPClientTimeoutFlag(), cfg.HTTPClient.Timeout, "no usage string")
+ cmd.PersistentFlags().Bool(HTTPClientTLSInsecureSkipVerifyFlag(), cfg.HTTPClient.TLSInsecureSkipVerify, "no usage string")
})
}
diff --git a/internal/config/helpers.gen.go b/internal/config/helpers.gen.go
index e4b82edd5..4c2f1d059 100644
--- a/internal/config/helpers.gen.go
+++ b/internal/config/helpers.gen.go
@@ -2399,6 +2399,31 @@ func GetHTTPClientTimeout() time.Duration { return global.GetHTTPClientTimeout()
// SetHTTPClientTimeout safely sets the value for global configuration 'HTTPClient.Timeout' field
func SetHTTPClientTimeout(v time.Duration) { global.SetHTTPClientTimeout(v) }
+// GetHTTPClientTLSInsecureSkipVerify safely fetches the Configuration value for state's 'HTTPClient.TLSInsecureSkipVerify' field
+func (st *ConfigState) GetHTTPClientTLSInsecureSkipVerify() (v bool) {
+ st.mutex.RLock()
+ v = st.config.HTTPClient.TLSInsecureSkipVerify
+ st.mutex.RUnlock()
+ return
+}
+
+// SetHTTPClientTLSInsecureSkipVerify safely sets the Configuration value for state's 'HTTPClient.TLSInsecureSkipVerify' field
+func (st *ConfigState) SetHTTPClientTLSInsecureSkipVerify(v bool) {
+ st.mutex.Lock()
+ defer st.mutex.Unlock()
+ st.config.HTTPClient.TLSInsecureSkipVerify = v
+ st.reloadToViper()
+}
+
+// HTTPClientTLSInsecureSkipVerifyFlag returns the flag name for the 'HTTPClient.TLSInsecureSkipVerify' field
+func HTTPClientTLSInsecureSkipVerifyFlag() string { return "httpclient-tls-insecure-skip-verify" }
+
+// GetHTTPClientTLSInsecureSkipVerify safely fetches the value for global configuration 'HTTPClient.TLSInsecureSkipVerify' field
+func GetHTTPClientTLSInsecureSkipVerify() bool { return global.GetHTTPClientTLSInsecureSkipVerify() }
+
+// SetHTTPClientTLSInsecureSkipVerify safely sets the value for global configuration 'HTTPClient.TLSInsecureSkipVerify' field
+func SetHTTPClientTLSInsecureSkipVerify(v bool) { global.SetHTTPClientTLSInsecureSkipVerify(v) }
+
// GetCacheGTSAccountMaxSize safely fetches the Configuration value for state's 'Cache.GTS.AccountMaxSize' field
func (st *ConfigState) GetCacheGTSAccountMaxSize() (v int) {
st.mutex.RLock()
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,