summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsyeopite <syeopite@syeopite.dev>2021-10-08 05:55:34 -0700
committersyeopite <syeopite@syeopite.dev>2021-11-12 03:47:57 -0800
commitc3747c2d49ec592fac9a4583bd85fbd4333674d6 (patch)
treeb4dd7a74963853b063b2cde877b3b07b0c3d20f0 /src
parent245122104a31608360f1749119716e6b8fc2a6b0 (diff)
downloadinvidious-c3747c2d49ec592fac9a4583bd85fbd4333674d6.tar.gz
invidious-c3747c2d49ec592fac9a4583bd85fbd4333674d6.tar.bz2
invidious-c3747c2d49ec592fac9a4583bd85fbd4333674d6.zip
Allow ggpht queries with QUIC disabled
Diffstat (limited to 'src')
-rw-r--r--src/invidious/routes/images.cr60
1 files changed, 45 insertions, 15 deletions
diff --git a/src/invidious/routes/images.cr b/src/invidious/routes/images.cr
index bb924cdf..e02dc9de 100644
--- a/src/invidious/routes/images.cr
+++ b/src/invidious/routes/images.cr
@@ -3,31 +3,61 @@ module Invidious::Routes::Images
def self.ggpht(env)
url = env.request.path.lchop("/ggpht")
- headers = HTTP::Headers{":authority" => "yt3.ggpht.com"}
+ headers = (
+ {% unless flag?(:disable_quic) %}
+ if CONFIG.use_quic
+ HTTP::Headers{":authority" => "yt3.ggpht.com"}
+ else
+ HTTP::Headers.new
+ end
+ {% else %}
+ HTTP::Headers.new
+ {% end %}
+ )
+
REQUEST_HEADERS_WHITELIST.each do |header|
if env.request.headers[header]?
headers[header] = env.request.headers[header]
end
end
- begin
- YT_POOL.client &.get(url, headers) do |response|
- env.response.status_code = response.status_code
- response.headers.each do |key, value|
- if !RESPONSE_HEADERS_BLACKLIST.includes?(key.downcase)
- env.response.headers[key] = value
- end
+ # We're encapsulating this into a proc in order to easily reuse this
+ # portion of the code for each request block below.
+ request_proc = ->(response : HTTP::Client::Response) {
+ env.response.status_code = response.status_code
+ response.headers.each do |key, value|
+ if !RESPONSE_HEADERS_BLACKLIST.includes?(key.downcase)
+ env.response.headers[key] = value
end
+ end
- env.response.headers["Access-Control-Allow-Origin"] = "*"
-
- if response.status_code >= 300
- env.response.headers.delete("Transfer-Encoding")
- break
- end
+ env.response.headers["Access-Control-Allow-Origin"] = "*"
- proxy_file(response, env)
+ if response.status_code >= 300
+ env.response.headers.delete("Transfer-Encoding")
+ return
end
+
+ proxy_file(response, env)
+ }
+
+ begin
+ {% unless flag?(:disable_quic) %}
+ if CONFIG.use_quic
+ YT_POOL.client &.get(url, headers) do |resp|
+ return request_proc.call(resp)
+ end
+ else
+ HTTP::Client.get("yt3.ggpht.com#{url}") do |resp|
+ return request_proc.call(resp)
+ end
+ end
+ {% else %}
+ # This can likely be optimized into a (small) pool sometime in the future.
+ HTTP::Client.get("yt3.ggpht.com#{url}") do |resp|
+ return request_proc.call(resp)
+ end
+ {% end %}
rescue ex
end
end