From 7d21298fabe11d7f6e29fea904db34434d03a087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Guillot?= Date: Wed, 11 Sep 2024 20:33:49 -0700 Subject: [PATCH] fix(mediaproxy): forward client user-agent to origin to bypass bot protection --- internal/ui/proxy.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/ui/proxy.go b/internal/ui/proxy.go index 34965275..4e54e1ff 100644 --- a/internal/ui/proxy.go +++ b/internal/ui/proxy.go @@ -8,6 +8,7 @@ import ( "crypto/sha256" "encoding/base64" "errors" + "fmt" "log/slog" "net/http" "net/url" @@ -87,13 +88,12 @@ func (h *handler) mediaProxy(w http.ResponseWriter, r *http.Request) { return } - // Note: User-Agent HTTP header is omitted to avoid being blocked by bot protection mechanisms. - req.Header.Add("Connection", "close") + req.Header.Set("Connection", "close") - forwardedRequestHeader := []string{"Range", "Accept", "Accept-Encoding"} + forwardedRequestHeader := []string{"Range", "Accept", "Accept-Encoding", "User-Agent"} for _, requestHeaderName := range forwardedRequestHeader { if r.Header.Get(requestHeaderName) != "" { - req.Header.Add(requestHeaderName, r.Header.Get(requestHeaderName)) + req.Header.Set(requestHeaderName, r.Header.Get(requestHeaderName)) } } @@ -128,7 +128,9 @@ func (h *handler) mediaProxy(w http.ResponseWriter, r *http.Request) { slog.String("media_url", mediaURL), slog.Int("status_code", resp.StatusCode), ) - html.NotFound(w, r) + + // Forward the status code from the origin. + http.Error(w, fmt.Sprintf("Origin status code is %d", resp.StatusCode), resp.StatusCode) return }