From eeeea74bf153e50c13b3bdac746d6727f7c7661d Mon Sep 17 00:00:00 2001
From: Benjamin Congdon <bencongdon96@gmail.com>
Date: Sun, 29 Nov 2020 12:11:38 -0800
Subject: [PATCH] Update Miniflux man page with UserAgent setting

---
 config/options.go          | 14 +++++++-------
 config/parser.go           |  4 ++--
 http/client/client.go      |  2 +-
 http/client/client_test.go |  2 +-
 miniflux.1                 |  5 +++++
 5 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/config/options.go b/config/options.go
index b266a470..9fcffe23 100644
--- a/config/options.go
+++ b/config/options.go
@@ -52,6 +52,7 @@ const (
 	defaultHTTPClientTimeout                  = 20
 	defaultHTTPClientMaxBodySize              = 15
 	defaultHTTPClientProxy                    = ""
+	defaultHTTPClientUserAgent                = ""
 	defaultAuthProxyHeader                    = ""
 	defaultAuthProxyUserCreation              = false
 	defaultMaintenanceMode                    = false
@@ -59,7 +60,6 @@ const (
 	defaultMetricsCollector                   = false
 	defaultMetricsRefreshInterval             = 60
 	defaultMetricsAllowedNetworks             = "127.0.0.1/8"
-	defaultUserAgent                          = ""
 )
 
 // Options contains configuration options.
@@ -106,6 +106,7 @@ type Options struct {
 	httpClientTimeout                  int
 	httpClientMaxBodySize              int64
 	httpClientProxy                    string
+	httpClientUserAgent                string
 	authProxyHeader                    string
 	authProxyUserCreation              bool
 	maintenanceMode                    bool
@@ -113,7 +114,6 @@ type Options struct {
 	metricsCollector                   bool
 	metricsRefreshInterval             int
 	metricsAllowedNetworks             []string
-	userAgent                          string
 }
 
 // NewOptions returns Options with default values.
@@ -166,7 +166,7 @@ func NewOptions() *Options {
 		metricsCollector:                   defaultMetricsCollector,
 		metricsRefreshInterval:             defaultMetricsRefreshInterval,
 		metricsAllowedNetworks:             []string{defaultMetricsAllowedNetworks},
-		userAgent:                          defaultUserAgent,
+		httpClientUserAgent:                defaultHTTPClientUserAgent,
 	}
 }
 
@@ -425,9 +425,9 @@ func (o *Options) MetricsAllowedNetworks() []string {
 	return o.metricsAllowedNetworks
 }
 
-// UserAgent returns the global User-Agent header for miniflux.
-func (o *Options) UserAgent() string {
-	return o.userAgent
+// HTTPClientUserAgent returns the global User-Agent header for miniflux.
+func (o *Options) HTTPClientUserAgent() string {
+	return o.httpClientUserAgent
 }
 
 func (o *Options) String() string {
@@ -474,6 +474,7 @@ func (o *Options) String() string {
 	builder.WriteString(fmt.Sprintf("HTTP_CLIENT_TIMEOUT: %v\n", o.httpClientTimeout))
 	builder.WriteString(fmt.Sprintf("HTTP_CLIENT_MAX_BODY_SIZE: %v\n", o.httpClientMaxBodySize))
 	builder.WriteString(fmt.Sprintf("HTTP_CLIENT_PROXY: %v\n", o.httpClientProxy))
+	builder.WriteString(fmt.Sprintf("HTTP_CLIENT_USER_AGENT: %v\n", o.httpClientUserAgent))
 	builder.WriteString(fmt.Sprintf("AUTH_PROXY_HEADER: %v\n", o.authProxyHeader))
 	builder.WriteString(fmt.Sprintf("AUTH_PROXY_USER_CREATION: %v\n", o.authProxyUserCreation))
 	builder.WriteString(fmt.Sprintf("MAINTENANCE_MODE: %v\n", o.maintenanceMode))
@@ -481,6 +482,5 @@ func (o *Options) String() string {
 	builder.WriteString(fmt.Sprintf("METRICS_COLLECTOR: %v\n", o.metricsCollector))
 	builder.WriteString(fmt.Sprintf("METRICS_REFRESH_INTERVAL: %v\n", o.metricsRefreshInterval))
 	builder.WriteString(fmt.Sprintf("METRICS_ALLOWED_NETWORKS: %v\n", o.metricsAllowedNetworks))
-	builder.WriteString(fmt.Sprintf("USER_AGENT: %v\n", o.userAgent))
 	return builder.String()
 }
diff --git a/config/parser.go b/config/parser.go
index 45fd08a7..1cfc5531 100644
--- a/config/parser.go
+++ b/config/parser.go
@@ -170,6 +170,8 @@ func (p *Parser) parseLines(lines []string) (err error) {
 			p.opts.httpClientMaxBodySize = int64(parseInt(value, defaultHTTPClientMaxBodySize) * 1024 * 1024)
 		case "HTTP_CLIENT_PROXY":
 			p.opts.httpClientProxy = parseString(value, defaultHTTPClientProxy)
+		case "HTTP_CLIENT_USER_AGENT":
+			p.opts.httpClientUserAgent = parseString(value, defaultHTTPClientUserAgent)
 		case "AUTH_PROXY_HEADER":
 			p.opts.authProxyHeader = parseString(value, defaultAuthProxyHeader)
 		case "AUTH_PROXY_USER_CREATION":
@@ -184,8 +186,6 @@ func (p *Parser) parseLines(lines []string) (err error) {
 			p.opts.metricsRefreshInterval = parseInt(value, defaultMetricsRefreshInterval)
 		case "METRICS_ALLOWED_NETWORKS":
 			p.opts.metricsAllowedNetworks = parseStringList(value, []string{defaultMetricsAllowedNetworks})
-		case "USER_AGENT":
-			p.opts.userAgent = parseString(value, defaultUserAgent)
 		}
 	}
 
diff --git a/http/client/client.go b/http/client/client.go
index cc137a59..40cbc399 100644
--- a/http/client/client.go
+++ b/http/client/client.go
@@ -72,7 +72,7 @@ func New(url string) *Client {
 
 // NewClientWithConfig initializes a new HTTP client with application config options.
 func NewClientWithConfig(url string, opts *config.Options) *Client {
-	userAgent := opts.UserAgent()
+	userAgent := opts.HTTPClientUserAgent()
 	if userAgent == "" {
 		userAgent = DefaultUserAgent
 	}
diff --git a/http/client/client_test.go b/http/client/client_test.go
index 74d67199..ab93ef60 100644
--- a/http/client/client_test.go
+++ b/http/client/client_test.go
@@ -62,7 +62,7 @@ func TestClientRequestUserAgent(t *testing.T) {
 	}
 
 	userAgent := "Custom User Agent"
-	os.Setenv("USER_AGENT", userAgent)
+	os.Setenv("HTTP_CLIENT_USER_AGENT", userAgent)
 	opts, err := config.NewParser().ParseEnvironmentVariables()
 	if err != nil {
 		t.Fatalf(`Parsing config failed: %v`, err)
diff --git a/miniflux.1 b/miniflux.1
index 0d049b0b..8ae9268f 100644
--- a/miniflux.1
+++ b/miniflux.1
@@ -277,6 +277,11 @@ Proxy URL for HTTP client\&.
 .br
 Default is empty\&.
 .TP
+.B HTTP_CLIENT_USER_AGENT
+The default User-Agent header to use for the HTTP client. Can be overridden in per-feed settings\&.
+.br
+Default is empty. When empty, Miniflux uses a default User-Agent that includes the Miniflux version\&.
+.TP
 .B AUTH_PROXY_HEADER
 Proxy authentication HTTP header\&.
 .TP
-- 
GitLab