From d94e5610d66dee4e841be83576a3f9f229928aac Mon Sep 17 00:00:00 2001 From: Geras Ghulyan Date: Thu, 4 Nov 2021 20:25:45 +0400 Subject: [PATCH] Add support for passing headers to remote server Add a new passRequestHeaders field to Proxy that identifies headers to pass from inbound request to remote servers. Also add associated flag to imageproxy CLI. This is initially added to support remote servers that require an authorization token. Fixes #321 --- cmd/imageproxy/main.go | 4 ++++ imageproxy.go | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/cmd/imageproxy/main.go b/cmd/imageproxy/main.go index 2c9ce5d..7bf3f55 100644 --- a/cmd/imageproxy/main.go +++ b/cmd/imageproxy/main.go @@ -39,6 +39,7 @@ var referrers = flag.String("referrers", "", "comma separated list of allowed re var includeReferer = flag.Bool("includeReferer", false, "include referer header in remote requests") var followRedirects = flag.Bool("followRedirects", true, "follow redirects") var baseURL = flag.String("baseURL", "", "default base URL for relative remote URLs") +var passRequestHeaders = flag.String("passRequestHeaders", "", "comma separatetd list of request headers to pass to remote server") var cache tieredCache var signatureKeys signatureKeyList var scaleUp = flag.Bool("scaleUp", false, "allow images to scale beyond their original dimensions") @@ -70,6 +71,9 @@ func main() { if *contentTypes != "" { p.ContentTypes = strings.Split(*contentTypes, ",") } + if *passRequestHeaders != "" { + p.PassRequestHeaders = strings.Split(*passRequestHeaders, ",") + } p.SignatureKeys = signatureKeys if *baseURL != "" { var err error diff --git a/imageproxy.go b/imageproxy.go index 8a37a56..02c07e8 100644 --- a/imageproxy.go +++ b/imageproxy.go @@ -85,6 +85,10 @@ type Proxy struct { // The User-Agent used by imageproxy when requesting origin image UserAgent string + + // PassRequestHeaders identifies HTTP headers to pass from inbound + // requests to the proxied server. + PassRequestHeaders []string } // NewProxy constructs a new proxy. The provided http RoundTripper will be @@ -179,6 +183,9 @@ func (p *Proxy) serveImage(w http.ResponseWriter, r *http.Request) { // pass along the referer header from the original request copyHeader(actualReq.Header, r.Header, "referer") } + if len(p.PassRequestHeaders) != 0 { + copyHeader(actualReq.Header, r.Header, p.PassRequestHeaders...) + } if p.FollowRedirects { // FollowRedirects is true (default), ensure that the redirected host is allowed p.Client.CheckRedirect = func(newreq *http.Request, via []*http.Request) error {