mirror of
https://github.com/iv-org/invidious.git
synced 2025-06-27 17:18:29 +00:00
fix csp + progress proxy + allow omit public_url
This commit is contained in:
parent
a1d61e05ce
commit
a47336365f
@ -80,12 +80,20 @@ db:
|
|||||||
## Both parameter can have identical URL when Invidious is hosted in
|
## Both parameter can have identical URL when Invidious is hosted in
|
||||||
## an internal network or at home or locally (localhost).
|
## an internal network or at home or locally (localhost).
|
||||||
##
|
##
|
||||||
|
## NOTE: If public_url is omitted, Invidious will use its built-in proxy
|
||||||
|
## to route companion requests through /companion, which is useful for
|
||||||
|
## simple setups where companion runs on the same network. When using
|
||||||
|
## the built-in proxy, CSP headers are not modified since requests
|
||||||
|
## stay within the same domain.
|
||||||
|
##
|
||||||
## Accepted values: "http(s)://<IP-HOSTNAME>:<Port>"
|
## Accepted values: "http(s)://<IP-HOSTNAME>:<Port>"
|
||||||
## Default: <none>
|
## Default: <none>
|
||||||
##
|
##
|
||||||
#invidious_companion:
|
#invidious_companion:
|
||||||
# - private_url: "http://localhost:8282/companion"
|
# - private_url: "http://localhost:8282/companion"
|
||||||
# public_url: "http://localhost:8282/companion"
|
# public_url: "http://localhost:8282/companion"
|
||||||
|
# # Example with built-in proxy (omit public_url):
|
||||||
|
# # - private_url: "http://localhost:8282/companion"
|
||||||
|
|
||||||
##
|
##
|
||||||
## API key for Invidious companion, used for securing the communication
|
## API key for Invidious companion, used for securing the communication
|
||||||
|
@ -82,6 +82,9 @@ class Config
|
|||||||
|
|
||||||
@[YAML::Field(converter: Preferences::URIConverter)]
|
@[YAML::Field(converter: Preferences::URIConverter)]
|
||||||
property public_url : URI = URI.parse("")
|
property public_url : URI = URI.parse("")
|
||||||
|
|
||||||
|
# Indicates if this companion instance uses the built-in proxy
|
||||||
|
property builtin_proxy : Bool = false
|
||||||
end
|
end
|
||||||
|
|
||||||
# Number of threads to use for crawling videos from channels (for updating subscriptions)
|
# Number of threads to use for crawling videos from channels (for updating subscriptions)
|
||||||
@ -271,6 +274,14 @@ class Config
|
|||||||
puts "Config: The value of 'invidious_companion_key' needs to be a size of 16 characters."
|
puts "Config: The value of 'invidious_companion_key' needs to be a size of 16 characters."
|
||||||
exit(1)
|
exit(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Set public_url to built-in proxy path when omitted
|
||||||
|
config.invidious_companion.each do |companion|
|
||||||
|
if companion.public_url.to_s.empty?
|
||||||
|
companion.public_url = URI.parse("/companion")
|
||||||
|
companion.builtin_proxy = true
|
||||||
|
end
|
||||||
|
end
|
||||||
elsif config.signature_server
|
elsif config.signature_server
|
||||||
puts("WARNING: inv-sig-helper is deprecated. Please switch to Invidious companion: https://docs.invidious.io/companion-installation/")
|
puts("WARNING: inv-sig-helper is deprecated. Please switch to Invidious companion: https://docs.invidious.io/companion-installation/")
|
||||||
else
|
else
|
||||||
|
@ -1,22 +1,33 @@
|
|||||||
module Invidious::Routes::Companion
|
module Invidious::Routes::Companion
|
||||||
# /companion
|
# /companion
|
||||||
def self.get_companion(env)
|
def self.get_companion(env)
|
||||||
url = env.request.path.lchop("/companion")
|
url = env.request.path
|
||||||
|
if env.request.query
|
||||||
|
url += "?#{env.request.query}"
|
||||||
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
COMPANION_POOL.client &.get(url, env.request.header) do |resp|
|
COMPANION_POOL.client do |wrapper|
|
||||||
return self.proxy_companion(env, resp)
|
puts env.request.headers
|
||||||
|
wrapper.client.get(url, env.request.headers) do |resp|
|
||||||
|
return self.proxy_companion(env, resp)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
rescue ex
|
rescue ex
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.options_companion(env)
|
def self.options_companion(env)
|
||||||
url = env.request.path.lchop("/companion")
|
url = env.request.path
|
||||||
|
if env.request.query
|
||||||
|
url += "?#{env.request.query}"
|
||||||
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
COMPANION_POOL.client &.options(url, env.request.header) do |resp|
|
COMPANION_POOL.client do |wrapper|
|
||||||
return self.proxy_companion(env, resp)
|
wrapper.client.options(url, env.request.headers) do |resp|
|
||||||
|
return self.proxy_companion(env, resp)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
rescue ex
|
rescue ex
|
||||||
end
|
end
|
||||||
|
@ -209,14 +209,17 @@ module Invidious::Routes::Embed
|
|||||||
|
|
||||||
if CONFIG.invidious_companion.present?
|
if CONFIG.invidious_companion.present?
|
||||||
invidious_companion = CONFIG.invidious_companion.sample
|
invidious_companion = CONFIG.invidious_companion.sample
|
||||||
invidious_companion_urls = CONFIG.invidious_companion.map do |companion|
|
invidious_companion_urls = CONFIG.invidious_companion.reject(&.builtin_proxy).map do |companion|
|
||||||
uri =
|
uri =
|
||||||
"#{companion.public_url.scheme}://#{companion.public_url.host}#{companion.public_url.port ? ":#{companion.public_url.port}" : ""}"
|
"#{companion.public_url.scheme}://#{companion.public_url.host}#{companion.public_url.port ? ":#{companion.public_url.port}" : ""}"
|
||||||
end.join(" ")
|
end.join(" ")
|
||||||
env.response.headers["Content-Security-Policy"] =
|
|
||||||
env.response.headers["Content-Security-Policy"]
|
if !invidious_companion_urls.empty?
|
||||||
.gsub("media-src", "media-src #{invidious_companion_urls}")
|
env.response.headers["Content-Security-Policy"] =
|
||||||
.gsub("connect-src", "connect-src #{invidious_companion_urls}")
|
env.response.headers["Content-Security-Policy"]
|
||||||
|
.gsub("media-src", "media-src #{invidious_companion_urls}")
|
||||||
|
.gsub("connect-src", "connect-src #{invidious_companion_urls}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
rendered "embed"
|
rendered "embed"
|
||||||
|
@ -194,14 +194,17 @@ module Invidious::Routes::Watch
|
|||||||
|
|
||||||
if CONFIG.invidious_companion.present?
|
if CONFIG.invidious_companion.present?
|
||||||
invidious_companion = CONFIG.invidious_companion.sample
|
invidious_companion = CONFIG.invidious_companion.sample
|
||||||
invidious_companion_urls = CONFIG.invidious_companion.map do |companion|
|
invidious_companion_urls = CONFIG.invidious_companion.reject(&.builtin_proxy).map do |companion|
|
||||||
uri =
|
uri =
|
||||||
"#{companion.public_url.scheme}://#{companion.public_url.host}#{companion.public_url.port ? ":#{companion.public_url.port}" : ""}"
|
"#{companion.public_url.scheme}://#{companion.public_url.host}#{companion.public_url.port ? ":#{companion.public_url.port}" : ""}"
|
||||||
end.join(" ")
|
end.join(" ")
|
||||||
env.response.headers["Content-Security-Policy"] =
|
|
||||||
env.response.headers["Content-Security-Policy"]
|
if !invidious_companion_urls.empty?
|
||||||
.gsub("media-src", "media-src #{invidious_companion_urls}")
|
env.response.headers["Content-Security-Policy"] =
|
||||||
.gsub("connect-src", "connect-src #{invidious_companion_urls}")
|
env.response.headers["Content-Security-Policy"]
|
||||||
|
.gsub("media-src", "media-src #{invidious_companion_urls}")
|
||||||
|
.gsub("connect-src", "connect-src #{invidious_companion_urls}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
templated "watch"
|
templated "watch"
|
||||||
|
@ -46,6 +46,7 @@ module Invidious::Routing
|
|||||||
self.register_api_v1_routes
|
self.register_api_v1_routes
|
||||||
self.register_api_manifest_routes
|
self.register_api_manifest_routes
|
||||||
self.register_video_playback_routes
|
self.register_video_playback_routes
|
||||||
|
self.register_companion_routes
|
||||||
end
|
end
|
||||||
|
|
||||||
# -------------------
|
# -------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user