initial support for base_url with invidious companion + proxy invidious_companion

This commit is contained in:
Emilien
2025-05-03 01:10:12 +02:00
committed by Émilien (perso)
parent 89c8b1b901
commit 324a416fd4
7 changed files with 103 additions and 29 deletions

View File

@@ -0,0 +1,37 @@
module Invidious::Routes::Companion
# /companion
def self.get_companion(env)
url = env.request.path.lchop("/companion")
begin
COMPANION_POOL.client &.get(url, env.request.header) do |resp|
return self.proxy_companion(env, resp)
end
rescue ex
end
end
def self.options_companion(env)
url = env.request.path.lchop("/companion")
begin
COMPANION_POOL.client &.options(url, env.request.header) do |resp|
return self.proxy_companion(env, resp)
end
rescue ex
end
end
private def self.proxy_companion(env, response)
env.response.status_code = response.status_code
response.headers.each do |key, value|
env.response.headers[key] = value
end
if response.status_code >= 300
return env.response.headers.delete("Transfer-Encoding")
end
return proxy_file(response, env)
end
end

View File

@@ -209,10 +209,14 @@ module Invidious::Routes::Embed
if CONFIG.invidious_companion.present?
invidious_companion = CONFIG.invidious_companion.sample
invidious_companion_urls = CONFIG.invidious_companion.map do |companion|
uri =
"#{companion.public_url.scheme}://#{companion.public_url.host}#{companion.public_url.port ? ":#{companion.public_url.port}" : ""}"
end.join(" ")
env.response.headers["Content-Security-Policy"] =
env.response.headers["Content-Security-Policy"]
.gsub("media-src", "media-src #{invidious_companion.public_url}")
.gsub("connect-src", "connect-src #{invidious_companion.public_url}")
.gsub("media-src", "media-src #{invidious_companion_urls}")
.gsub("connect-src", "connect-src #{invidious_companion_urls}")
end
rendered "embed"

View File

@@ -194,10 +194,14 @@ module Invidious::Routes::Watch
if CONFIG.invidious_companion.present?
invidious_companion = CONFIG.invidious_companion.sample
invidious_companion_urls = CONFIG.invidious_companion.map do |companion|
uri =
"#{companion.public_url.scheme}://#{companion.public_url.host}#{companion.public_url.port ? ":#{companion.public_url.port}" : ""}"
end.join(" ")
env.response.headers["Content-Security-Policy"] =
env.response.headers["Content-Security-Policy"]
.gsub("media-src", "media-src #{invidious_companion.public_url}")
.gsub("connect-src", "connect-src #{invidious_companion.public_url}")
.gsub("media-src", "media-src #{invidious_companion_urls}")
.gsub("connect-src", "connect-src #{invidious_companion_urls}")
end
templated "watch"