diff options
| author | Omar Roth <omarroth@protonmail.com> | 2020-03-06 13:53:35 -0500 |
|---|---|---|
| committer | Omar Roth <omarroth@protonmail.com> | 2020-03-06 13:53:35 -0500 |
| commit | bb72672dd90c0cd394891622637f99d828f1525c (patch) | |
| tree | bded11b0becf98718811ffb1c5a0222d6876ac66 | |
| parent | d96dee3aa66980cfdd4a18d728fa95d407797e36 (diff) | |
| download | invidious-bb72672dd90c0cd394891622637f99d828f1525c.tar.gz invidious-bb72672dd90c0cd394891622637f99d828f1525c.tar.bz2 invidious-bb72672dd90c0cd394891622637f99d828f1525c.zip | |
Replace static asset requests with QUIC
| -rw-r--r-- | src/invidious.cr | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/invidious.cr b/src/invidious.cr index 1c810d1c..fe07f9b5 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -99,8 +99,7 @@ LOCALES = { "zh-TW" => load_locale("zh-TW"), } -YT_POOL = QUICPool.new(YT_URL, capacity: CONFIG.pool_size, timeout: 0.05) -YT_IMG_POOL = QUICPool.new(YT_IMG_URL, capacity: CONFIG.pool_size, timeout: 0.05) +YT_POOL = QUICPool.new(YT_URL, capacity: CONFIG.pool_size, timeout: 0.1) config = CONFIG logger = Invidious::LogHandler.new @@ -5646,11 +5645,10 @@ get "/videoplayback" do |env| end get "/ggpht/*" do |env| - host = "https://yt3.ggpht.com" - client = make_client(URI.parse(host)) url = env.request.path.lchop("/ggpht") headers = HTTP::Headers.new + headers[":authority"] = "yt3.ggpht.com" REQUEST_HEADERS_WHITELIST.each do |header| if env.request.headers[header]? headers[header] = env.request.headers[header] @@ -5658,7 +5656,7 @@ get "/ggpht/*" do |env| end begin - client.get(url, headers) do |response| + 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) @@ -5691,16 +5689,16 @@ get "/sb/:id/:storyboard/:index" do |env| storyboard = env.params.url["storyboard"] index = env.params.url["index"] + url = "/sb/#{id}/#{storyboard}/#{index}?#{env.params.query}" + + headers = HTTP::Headers.new + if storyboard.starts_with? "storyboard_live" - host = "https://i.ytimg.com" + headers[":authority"] = "i.ytimg.com" else - host = "https://i9.ytimg.com" + headers[":authority"] = "i9.ytimg.com" end - client = make_client(URI.parse(host)) - - url = "/sb/#{id}/#{storyboard}/#{index}?#{env.params.query}" - headers = HTTP::Headers.new REQUEST_HEADERS_WHITELIST.each do |header| if env.request.headers[header]? headers[header] = env.request.headers[header] @@ -5708,7 +5706,7 @@ get "/sb/:id/:storyboard/:index" do |env| end begin - client.get(url, headers) do |response| + 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) @@ -5734,11 +5732,10 @@ get "/s_p/:id/:name" do |env| id = env.params.url["id"] name = env.params.url["name"] - host = "https://i9.ytimg.com" - client = make_client(URI.parse(host)) url = env.request.resource headers = HTTP::Headers.new + headers[":authority"] = "i9.ytimg.com" REQUEST_HEADERS_WHITELIST.each do |header| if env.request.headers[header]? headers[header] = env.request.headers[header] @@ -5746,7 +5743,7 @@ get "/s_p/:id/:name" do |env| end begin - client.get(url, headers) do |response| + 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) @@ -5801,9 +5798,12 @@ get "/vi/:id/:name" do |env| id = env.params.url["id"] name = env.params.url["name"] + headers = HTTP::Headers.new + headers[":authority"] = "i.ytimg.com" + if name == "maxres.jpg" build_thumbnails(id, config, Kemal.config).each do |thumb| - if YT_IMG_POOL.client &.head("/vi/#{id}/#{thumb[:url]}.jpg").status_code == 200 + if YT_POOL.client &.head("/vi/#{id}/#{thumb[:url]}.jpg", headers).status_code == 200 name = thumb[:url] + ".jpg" break end @@ -5811,7 +5811,6 @@ get "/vi/:id/:name" do |env| end url = "/vi/#{id}/#{name}" - headers = HTTP::Headers.new REQUEST_HEADERS_WHITELIST.each do |header| if env.request.headers[header]? headers[header] = env.request.headers[header] @@ -5819,7 +5818,7 @@ get "/vi/:id/:name" do |env| end begin - YT_IMG_POOL.client &.get(url, headers) do |response| + 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) |
