Proxy: Handle non-200 HTTP codes on DASH manifests ()

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
This commit is contained in:
Samantaz Fox 2024-04-26 23:25:54 +02:00
commit bcb679e653
No known key found for this signature in database
GPG Key ID: F42821059186176E

@ -21,7 +21,13 @@ module Invidious::Routes::API::Manifest
end end
if dashmpd = video.dash_manifest_url 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| manifest = manifest.gsub(/<BaseURL>[^<]+<\/BaseURL>/) do |baseurl|
url = baseurl.lchop("<BaseURL>") url = baseurl.lchop("<BaseURL>")