diff options
author | Frédéric Guillot <fred@miniflux.net> | 2019-06-02 07:13:35 -0700 |
---|---|---|
committer | fguillot <fred@miniflux.net> | 2019-06-02 07:29:56 -0700 |
commit | bb720c87c191efe36a328d95a918f75df51d4976 (patch) | |
tree | 35b6e87ddf5c0b37208f489fd6680075f269a3ef /config | |
parent | 228862fefaa645026caa483ffe9993bf8c00b22e (diff) |
Make HTTP Client timeout and max body size configurable
Diffstat (limited to 'config')
-rw-r--r-- | config/config_test.go | 66 | ||||
-rw-r--r-- | config/options.go | 52 | ||||
-rw-r--r-- | config/parser.go | 7 |
3 files changed, 103 insertions, 22 deletions
diff --git a/config/config_test.go b/config/config_test.go index 0e691fc..6b6cdf2 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -984,3 +984,69 @@ func TestHTTPSOn(t *testing.T) { t.Fatalf(`Unexpected HTTPS value, got "%v"`, opts.HTTPS) } } + +func TestHTTPClientTimeout(t *testing.T) { + os.Clearenv() + os.Setenv("HTTP_CLIENT_TIMEOUT", "42") + + opts, err := parse() + if err != nil { + t.Fatalf(`Parsing failure: %q`, err) + } + + expected := 42 + result := opts.HTTPClientTimeout() + + if result != expected { + t.Fatalf(`Unexpected HTTP_CLIENT_TIMEOUT value, got %d instead of %d`, result, expected) + } +} + +func TestDefaultHTTPClientTimeoutValue(t *testing.T) { + os.Clearenv() + + opts, err := parse() + if err != nil { + t.Fatalf(`Parsing failure: %q`, err) + } + + expected := defaultHTTPClientTimeout + result := opts.HTTPClientTimeout() + + if result != expected { + t.Fatalf(`Unexpected HTTP_CLIENT_TIMEOUT value, got %d instead of %d`, result, expected) + } +} + +func TestHTTPClientMaxBodySize(t *testing.T) { + os.Clearenv() + os.Setenv("HTTP_CLIENT_MAX_BODY_SIZE", "42") + + opts, err := parse() + if err != nil { + t.Fatalf(`Parsing failure: %q`, err) + } + + expected := int64(42 * 1024 * 1024) + result := opts.HTTPClientMaxBodySize() + + if result != expected { + t.Fatalf(`Unexpected HTTP_CLIENT_MAX_BODY_SIZE value, got %d instead of %d`, result, expected) + } +} + +func TestDefaultHTTPClientMaxBodySizeValue(t *testing.T) { + os.Clearenv() + + opts, err := parse() + if err != nil { + t.Fatalf(`Parsing failure: %q`, err) + } + + expected := int64(defaultHTTPClientMaxBodySize * 1024 * 1024) + result := opts.HTTPClientMaxBodySize() + + if result != expected { + t.Fatalf(`Unexpected HTTP_CLIENT_MAX_BODY_SIZE value, got %d instead of %d`, result, expected) + } +} diff --git a/config/options.go b/config/options.go index ad8d2c7..32105e9 100644 --- a/config/options.go +++ b/config/options.go @@ -5,25 +5,27 @@ package config // import "miniflux.app/config" const ( - defaultBaseURL = "http://localhost" - defaultWorkerPoolSize = 5 - defaultPollingFrequency = 60 - defaultBatchSize = 10 - defaultDatabaseURL = "user=postgres password=postgres dbname=miniflux2 sslmode=disable" - defaultDatabaseMaxConns = 20 - defaultDatabaseMinConns = 1 - defaultArchiveReadDays = 60 - defaultListenAddr = "127.0.0.1:8080" - defaultCertFile = "" - defaultKeyFile = "" - defaultCertDomain = "" - defaultCertCache = "/tmp/cert_cache" - defaultCleanupFrequency = 24 - defaultProxyImages = "http-only" - defaultOAuth2ClientID = "" - defaultOAuth2ClientSecret = "" - defaultOAuth2RedirectURL = "" - defaultOAuth2Provider = "" + defaultBaseURL = "http://localhost" + defaultWorkerPoolSize = 5 + defaultPollingFrequency = 60 + defaultBatchSize = 10 + defaultDatabaseURL = "user=postgres password=postgres dbname=miniflux2 sslmode=disable" + defaultDatabaseMaxConns = 20 + defaultDatabaseMinConns = 1 + defaultArchiveReadDays = 60 + defaultListenAddr = "127.0.0.1:8080" + defaultCertFile = "" + defaultKeyFile = "" + defaultCertDomain = "" + defaultCertCache = "/tmp/cert_cache" + defaultCleanupFrequency = 24 + defaultProxyImages = "http-only" + defaultOAuth2ClientID = "" + defaultOAuth2ClientSecret = "" + defaultOAuth2RedirectURL = "" + defaultOAuth2Provider = "" + defaultHTTPClientTimeout = 20 + defaultHTTPClientMaxBodySize = 15 ) // Options contains configuration options. @@ -58,6 +60,8 @@ type Options struct { oauth2RedirectURL string oauth2Provider string pocketConsumerKey string + httpClientTimeout int + httpClientMaxBodySize int64 } // HasDebugMode returns true if debug mode is enabled. @@ -212,3 +216,13 @@ func (o *Options) PocketConsumerKey(defaultValue string) string { } return defaultValue } + +// HTTPClientTimeout returns the time limit in seconds before the HTTP client cancel the request. +func (o *Options) HTTPClientTimeout() int { + return o.httpClientTimeout +} + +// HTTPClientMaxBodySize returns the number of bytes allowed for the HTTP client to transfer. +func (o *Options) HTTPClientMaxBodySize() int64 { + return o.httpClientMaxBodySize +} diff --git a/config/parser.go b/config/parser.go index 996d0a8..b2ed2e7 100644 --- a/config/parser.go +++ b/config/parser.go @@ -45,6 +45,8 @@ func parse() (opts *Options, err error) { opts.batchSize = getIntValue("BATCH_SIZE", defaultBatchSize) opts.archiveReadDays = getIntValue("ARCHIVE_READ_DAYS", defaultArchiveReadDays) opts.proxyImages = getStringValue("PROXY_IMAGES", defaultProxyImages) + opts.createAdmin = getBooleanValue("CREATE_ADMIN") + opts.pocketConsumerKey = getStringValue("POCKET_CONSUMER_KEY", "") opts.oauth2UserCreationAllowed = getBooleanValue("OAUTH2_USER_CREATION") opts.oauth2ClientID = getStringValue("OAUTH2_CLIENT_ID", defaultOAuth2ClientID) @@ -52,9 +54,8 @@ func parse() (opts *Options, err error) { opts.oauth2RedirectURL = getStringValue("OAUTH2_REDIRECT_URL", defaultOAuth2RedirectURL) opts.oauth2Provider = getStringValue("OAUTH2_PROVIDER", defaultOAuth2Provider) - opts.pocketConsumerKey = getStringValue("POCKET_CONSUMER_KEY", "") - - opts.createAdmin = getBooleanValue("CREATE_ADMIN") + opts.httpClientTimeout = getIntValue("HTTP_CLIENT_TIMEOUT", defaultHTTPClientTimeout) + opts.httpClientMaxBodySize = int64(getIntValue("HTTP_CLIENT_MAX_BODY_SIZE", defaultHTTPClientMaxBodySize) * 1024 * 1024) return opts, nil } |