From 33a939ca81d1efee89464ca80225fc021958d999 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Fri, 1 May 2026 17:27:51 +0200 Subject: [PATCH] fix(playback): restore playback service and handle chunked proxy responses --- api/playback/service_proxy.go | 7 ++++++- internal/server/routes.go | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/api/playback/service_proxy.go b/api/playback/service_proxy.go index cbd800d..41fd3e7 100644 --- a/api/playback/service_proxy.go +++ b/api/playback/service_proxy.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "net/http" + "strconv" "strings" ) @@ -40,11 +41,16 @@ func (s *Service) ProxyStream(ctx context.Context, targetURL string, referer str } headers := cloneHeaders(resp.Header) + headers.Del("Content-Length") + headers.Del("Transfer-Encoding") headers.Set("Content-Type", "application/vnd.apple.mpegurl") + headers.Set("Content-Length", strconv.Itoa(len(rewritten))) return resp.StatusCode, headers, []byte(rewritten), nil, nil } headers := cloneHeaders(resp.Header) + // Some upstream servers send transfer-encoding chunked, we should let go's http server handle it + headers.Del("Transfer-Encoding") return resp.StatusCode, headers, nil, resp.Body, nil } @@ -58,7 +64,6 @@ func isM3U8(targetURL string, contentType string) bool { var hopHeaders = map[string]struct{}{ "connection": {}, - "transfer-encoding": {}, "keep-alive": {}, "proxy-authenticate": {}, "proxy-authorization": {}, diff --git a/internal/server/routes.go b/internal/server/routes.go index 049da70..8961cf2 100644 --- a/internal/server/routes.go +++ b/internal/server/routes.go @@ -52,7 +52,11 @@ func NewRouter(cfg Config) http.Handler { middleware.InitAuth(cfg.AuthService) animeHandler := anime.NewHandler(cfg.JikanClient, cfg.DB) - playbackHandler := playback.NewHandler(nil, cfg.JikanClient) + + playbackSvc := playback.NewService(cfg.DB, cfg.SQLDB, playback.Config{ + ProxyTokenSecret: cfg.PlaybackProxySecret, + }) + playbackHandler := playback.NewHandler(playbackSvc, cfg.JikanClient) // Serve static files fs := http.FileServer(http.Dir("./static"))