From b9e1cc9aeb5e5a9ea245b6ebeeaf8d4d152d838e Mon Sep 17 00:00:00 2001 From: mkelvers Date: Mon, 1 Jun 2026 22:14:15 +0200 Subject: [PATCH] refactor: dedupe proxy handlers --- internal/playback/handler/handler.go | 51 ++++++++++++++++------------ 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/internal/playback/handler/handler.go b/internal/playback/handler/handler.go index 82e96db..7330e62 100644 --- a/internal/playback/handler/handler.go +++ b/internal/playback/handler/handler.go @@ -2,6 +2,7 @@ package handler import ( + "context" "fmt" "io" "mal/internal/domain" @@ -281,33 +282,22 @@ func (h *PlaybackHandler) HandleEpisodeThumbnails(c *gin.Context) { } func (h *PlaybackHandler) HandleProxyStream(c *gin.Context) { - token := c.Query("token") - if token == "" { - c.Status(http.StatusBadRequest) + targetURL, referer, ok := h.resolveProxyRequestTarget(c) + if !ok { return } - targetURL, referer, err := h.svc.ResolveProxyToken(token) - if err != nil { - c.Status(http.StatusForbidden) - return - } - - req, err := http.NewRequestWithContext(c.Request.Context(), http.MethodGet, targetURL, nil) + req, err := newProxyRequest(c.Request.Context(), targetURL, referer) if err != nil { c.Status(http.StatusBadGateway) return } - if referer != "" { - req.Header.Set("Referer", referer) - } if rangeHeader := c.GetHeader("Range"); rangeHeader != "" { req.Header.Set("Range", rangeHeader) } if ifRangeHeader := c.GetHeader("If-Range"); ifRangeHeader != "" { req.Header.Set("If-Range", ifRangeHeader) } - req.Header.Set("User-Agent", netutil.Firefox121) resp, err := h.streamingClient.Do(req) if err != nil { @@ -336,16 +326,39 @@ func copyProxyHeaders(dst http.Header, src http.Header) { } } -func (h *PlaybackHandler) HandleProxySubtitle(c *gin.Context) { +func (h *PlaybackHandler) resolveProxyRequestTarget(c *gin.Context) (string, string, bool) { token := c.Query("token") if token == "" { c.Status(http.StatusBadRequest) - return + return "", "", false } targetURL, referer, err := h.svc.ResolveProxyToken(token) if err != nil { c.Status(http.StatusForbidden) + return "", "", false + } + + return targetURL, referer, true +} + +func newProxyRequest(ctx context.Context, targetURL string, referer string) (*http.Request, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, targetURL, nil) + if err != nil { + return nil, err + } + + if referer != "" { + req.Header.Set("Referer", referer) + } + req.Header.Set("User-Agent", netutil.Firefox121) + + return req, nil +} + +func (h *PlaybackHandler) HandleProxySubtitle(c *gin.Context) { + targetURL, referer, ok := h.resolveProxyRequestTarget(c) + if !ok { return } @@ -354,15 +367,11 @@ func (h *PlaybackHandler) HandleProxySubtitle(c *gin.Context) { return } - req, err := http.NewRequestWithContext(c.Request.Context(), http.MethodGet, targetURL, nil) + req, err := newProxyRequest(c.Request.Context(), targetURL, referer) if err != nil { c.Status(http.StatusBadGateway) return } - if referer != "" { - req.Header.Set("Referer", referer) - } - req.Header.Set("User-Agent", netutil.Firefox121) resp, err := h.proxyClient.Do(req) if err != nil {