fix(playback): restore playback service and handle chunked proxy responses
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -40,11 +41,16 @@ func (s *Service) ProxyStream(ctx context.Context, targetURL string, referer str
|
|||||||
}
|
}
|
||||||
|
|
||||||
headers := cloneHeaders(resp.Header)
|
headers := cloneHeaders(resp.Header)
|
||||||
|
headers.Del("Content-Length")
|
||||||
|
headers.Del("Transfer-Encoding")
|
||||||
headers.Set("Content-Type", "application/vnd.apple.mpegurl")
|
headers.Set("Content-Type", "application/vnd.apple.mpegurl")
|
||||||
|
headers.Set("Content-Length", strconv.Itoa(len(rewritten)))
|
||||||
return resp.StatusCode, headers, []byte(rewritten), nil, nil
|
return resp.StatusCode, headers, []byte(rewritten), nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
headers := cloneHeaders(resp.Header)
|
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
|
return resp.StatusCode, headers, nil, resp.Body, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,7 +64,6 @@ func isM3U8(targetURL string, contentType string) bool {
|
|||||||
|
|
||||||
var hopHeaders = map[string]struct{}{
|
var hopHeaders = map[string]struct{}{
|
||||||
"connection": {},
|
"connection": {},
|
||||||
"transfer-encoding": {},
|
|
||||||
"keep-alive": {},
|
"keep-alive": {},
|
||||||
"proxy-authenticate": {},
|
"proxy-authenticate": {},
|
||||||
"proxy-authorization": {},
|
"proxy-authorization": {},
|
||||||
|
|||||||
@@ -52,7 +52,11 @@ func NewRouter(cfg Config) http.Handler {
|
|||||||
middleware.InitAuth(cfg.AuthService)
|
middleware.InitAuth(cfg.AuthService)
|
||||||
|
|
||||||
animeHandler := anime.NewHandler(cfg.JikanClient, cfg.DB)
|
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
|
// Serve static files
|
||||||
fs := http.FileServer(http.Dir("./static"))
|
fs := http.FileServer(http.Dir("./static"))
|
||||||
|
|||||||
Reference in New Issue
Block a user