summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invidious/routes/images.cr108
1 files changed, 76 insertions, 32 deletions
diff --git a/src/invidious/routes/images.cr b/src/invidious/routes/images.cr
index e02dc9de..d14427f7 100644
--- a/src/invidious/routes/images.cr
+++ b/src/invidious/routes/images.cr
@@ -78,7 +78,9 @@ module Invidious::Routes::Images
headers = HTTP::Headers.new
- headers[":authority"] = "#{authority}.ytimg.com"
+ {% unless flag?(:disable_quic) %}
+ headers[":authority"] = "#{authority}.ytimg.com"
+ {% end %}
REQUEST_HEADERS_WHITELIST.each do |header|
if env.request.headers[header]?
@@ -86,25 +88,41 @@ module Invidious::Routes::Images
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
+ 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["Connection"] = "close"
- env.response.headers["Access-Control-Allow-Origin"] = "*"
-
- if response.status_code >= 300
- env.response.headers.delete("Transfer-Encoding")
- break
- end
+ env.response.headers["Connection"] = "close"
+ env.response.headers["Access-Control-Allow-Origin"] = "*"
- proxy_file(response, env)
+ if response.status_code >= 300
+ return env.response.headers.delete("Transfer-Encoding")
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("#{authority}.ytimg.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("#{authority}.ytimg.com#{url}") do |resp|
+ return request_proc.call(resp)
+ end
+ {% end %}
rescue ex
end
end
@@ -113,34 +131,60 @@ module Invidious::Routes::Images
def self.s_p_image(env)
id = env.params.url["id"]
name = env.params.url["name"]
-
url = env.request.resource
- headers = HTTP::Headers{":authority" => "i9.ytimg.com"}
+ headers = (
+ {% unless flag?(:disable_quic) %}
+ if CONFIG.use_quic
+ HTTP::Headers{":authority" => "i9.ytimg.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
+ 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 && response.status_code != 404
- env.response.headers.delete("Transfer-Encoding")
- break
- end
+ env.response.headers["Access-Control-Allow-Origin"] = "*"
- proxy_file(response, env)
+ if response.status_code >= 300 && response.status_code != 404
+ return env.response.headers.delete("Transfer-Encoding")
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("i9.ytimg.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("i9.ytimg.com#{url}") do |resp|
+ return request_proc.call(resp)
+ end
+ {% end %}
rescue ex
end
end