summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2024-04-26 23:25:54 +0200
committerSamantaz Fox <coding@samantaz.fr>2024-04-26 23:25:54 +0200
commitbcb679e653aa0183a5c9c69e363e0fb6ccfe0e49 (patch)
tree960f16c64dc785a2a8843e4333eddf3ca3530fd1
parentb163afecb747de02a2097c481cd546b562b5a252 (diff)
parent72bcd3cc72cf10bda461235a39d18eee15130014 (diff)
downloadinvidious-bcb679e653aa0183a5c9c69e363e0fb6ccfe0e49.tar.gz
invidious-bcb679e653aa0183a5c9c69e363e0fb6ccfe0e49.tar.bz2
invidious-bcb679e653aa0183a5c9c69e363e0fb6ccfe0e49.zip
Proxy: Handle non-200 HTTP codes on DASH manifests (#4429)
Before this PR, Invidious assumed that fetching the DASH manifest from YouTube will always be successful and didn't check the status code. That meant that if YouTube gave a rate-limiting page, invidious would return an HTTP 200 response with the 'application/dash+xml' Content-Type header and the YouTube ratelimiting page as the body. No associated issue
-rw-r--r--src/invidious/routes/api/manifest.cr8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/invidious/routes/api/manifest.cr b/src/invidious/routes/api/manifest.cr
index 662d1002..d89e752c 100644
--- a/src/invidious/routes/api/manifest.cr
+++ b/src/invidious/routes/api/manifest.cr
@@ -21,7 +21,13 @@ module Invidious::Routes::API::Manifest
end
if dashmpd = video.dash_manifest_url
- manifest = YT_POOL.client &.get(URI.parse(dashmpd).request_target).body
+ response = YT_POOL.client &.get(URI.parse(dashmpd).request_target)
+
+ if response.status_code != 200
+ haltf env, status_code: response.status_code
+ end
+
+ manifest = response.body
manifest = manifest.gsub(/<BaseURL>[^<]+<\/BaseURL>/) do |baseurl|
url = baseurl.lchop("<BaseURL>")