diff --git a/README.md b/README.md index 66435a7..abd5780 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,10 @@ Only one instance of the plugin is *possible*. - string - default: "" - Database selection for the Redis service +- HTTPTimeoutSeconds + - int64 + - default: 10 + - Default timeout in seconds for contacting Crowdsec LAPI - UpdateIntervalSeconds - int64 - default: 60 @@ -173,6 +177,7 @@ http: logLevel: DEBUG updateIntervalSeconds: 60 defaultDecisionSeconds: 60 + httpTimeoutSeconds: 10 crowdsecMode: live crowdsecLapiKey: privateKey-foo crowdsecLapiKeyFile: /etc/traefik/cs-privateKey-foo diff --git a/bouncer.go b/bouncer.go index ac86a9c..a6b7d6b 100644 --- a/bouncer.go +++ b/bouncer.go @@ -137,7 +137,7 @@ func New(ctx context.Context, next http.Handler, config *configuration.Config, n IdleConnTimeout: 30 * time.Second, TLSClientConfig: tlsConfig, }, - Timeout: 10 * time.Second, + Timeout: time.Duration(config.HTTPTimeoutSeconds) * time.Second, }, cacheClient: &cache.Client{}, } diff --git a/pkg/configuration/configuration.go b/pkg/configuration/configuration.go index a5bb102..36b1638 100644 --- a/pkg/configuration/configuration.go +++ b/pkg/configuration/configuration.go @@ -50,6 +50,7 @@ type Config struct { CrowdsecCapiScenarios []string `json:"crowdsecCapiScenarios,omitempty"` UpdateIntervalSeconds int64 `json:"updateIntervalSeconds,omitempty"` DefaultDecisionSeconds int64 `json:"defaultDecisionSeconds,omitempty"` + HTTPTimeoutSeconds int64 `json:"httpTimeoutSeconds,omitempty"` ForwardedHeadersCustomName string `json:"forwardedheaderscustomheader,omitempty"` ForwardedHeadersTrustedIPs []string `json:"forwardedHeadersTrustedIps,omitempty"` ClientTrustedIPs []string `json:"clientTrustedIps,omitempty"` @@ -81,6 +82,7 @@ func New() *Config { CrowdsecLapiTLSInsecureVerify: false, UpdateIntervalSeconds: 60, DefaultDecisionSeconds: 60, + HTTPTimeoutSeconds: 10, ForwardedHeadersCustomName: "X-Forwarded-For", ForwardedHeadersTrustedIPs: []string{}, ClientTrustedIPs: []string{}, @@ -241,6 +243,7 @@ func validateParamsRequired(config *Config) error { requiredInt := map[string]int64{ "UpdateIntervalSeconds": config.UpdateIntervalSeconds, "DefaultDecisionSeconds": config.DefaultDecisionSeconds, + "HTTPTimeoutSeconds": config.HTTPTimeoutSeconds, } for key, val := range requiredInt { if val < 1 {