File tree Expand file tree Collapse file tree 6 files changed +53
-16
lines changed Expand file tree Collapse file tree 6 files changed +53
-16
lines changed Original file line number Diff line number Diff line change 8080# # Both parameter can have identical URL when Invidious is hosted in
8181# # an internal network or at home or locally (localhost).
8282# #
83+ # # NOTE: If public_url is omitted, Invidious will use its built-in proxy
84+ # # to route companion requests through /companion, which is useful for
85+ # # simple setups where companion runs on the same network. When using
86+ # # the built-in proxy, CSP headers are not modified since requests
87+ # # stay within the same domain.
88+ # #
8389# # Accepted values: "http(s)://<IP-HOSTNAME>:<Port>"
8490# # Default: <none>
8591# #
8692# invidious_companion:
8793# - private_url: "http://localhost:8282/companion"
8894# public_url: "http://localhost:8282/companion"
95+ # # Example with built-in proxy (omit public_url):
96+ # # - private_url: "http://localhost:8282/companion"
8997
9098# #
9199# # API key for Invidious companion, used for securing the communication
Original file line number Diff line number Diff line change @@ -82,6 +82,9 @@ class Config
8282
8383 @[YAML ::Field (converter: Preferences ::URIConverter )]
8484 property public_url : URI = URI .parse(" " )
85+
86+ # Indicates if this companion instance uses the built-in proxy
87+ property builtin_proxy : Bool = false
8588 end
8689
8790 # Number of threads to use for crawling videos from channels (for updating subscriptions)
@@ -271,6 +274,14 @@ class Config
271274 puts " Config: The value of 'invidious_companion_key' needs to be a size of 16 characters."
272275 exit(1 )
273276 end
277+
278+ # Set public_url to built-in proxy path when omitted
279+ config.invidious_companion.each do |companion |
280+ if companion.public_url.to_s.empty?
281+ companion.public_url = URI .parse(" /companion" )
282+ companion.builtin_proxy = true
283+ end
284+ end
274285 elsif config.signature_server
275286 puts(" WARNING: inv-sig-helper is deprecated. Please switch to Invidious companion: https://docs.invidious.io/companion-installation/" )
276287 else
Original file line number Diff line number Diff line change 11module Invidious::Routes::Companion
22 # /companion
33 def self.get_companion (env )
4- url = env.request.path.lchop(" /companion" )
4+ url = env.request.path
5+ if env.request.query
6+ url += " ?#{ env.request.query } "
7+ end
58
69 begin
7- COMPANION_POOL .client & .get(url, env.request.header) do |resp |
8- return self .proxy_companion(env, resp)
10+ COMPANION_POOL .client do |wrapper |
11+ puts env.request.headers
12+ wrapper.client.get(url, env.request.headers) do |resp |
13+ return self .proxy_companion(env, resp)
14+ end
915 end
1016 rescue ex
1117 end
1218 end
1319
1420 def self.options_companion (env )
15- url = env.request.path.lchop(" /companion" )
21+ url = env.request.path
22+ if env.request.query
23+ url += " ?#{ env.request.query } "
24+ end
1625
1726 begin
18- COMPANION_POOL .client & .options(url, env.request.header) do |resp |
19- return self .proxy_companion(env, resp)
27+ COMPANION_POOL .client do |wrapper |
28+ wrapper.client.options(url, env.request.headers) do |resp |
29+ return self .proxy_companion(env, resp)
30+ end
2031 end
2132 rescue ex
2233 end
Original file line number Diff line number Diff line change @@ -209,14 +209,17 @@ module Invidious::Routes::Embed
209209
210210 if CONFIG .invidious_companion.present?
211211 invidious_companion = CONFIG .invidious_companion.sample
212- invidious_companion_urls = CONFIG .invidious_companion.map do |companion |
212+ invidious_companion_urls = CONFIG .invidious_companion.reject( & .builtin_proxy). map do |companion |
213213 uri =
214214 " #{ companion.public_url.scheme } ://#{ companion.public_url.host } #{ companion.public_url.port ? " :#{ companion.public_url.port } " : " " } "
215215 end .join(" " )
216- env.response.headers[" Content-Security-Policy" ] =
217- env.response.headers[" Content-Security-Policy" ]
218- .gsub(" media-src" , " media-src #{ invidious_companion_urls } " )
219- .gsub(" connect-src" , " connect-src #{ invidious_companion_urls } " )
216+
217+ if ! invidious_companion_urls.empty?
218+ env.response.headers[" Content-Security-Policy" ] =
219+ env.response.headers[" Content-Security-Policy" ]
220+ .gsub(" media-src" , " media-src #{ invidious_companion_urls } " )
221+ .gsub(" connect-src" , " connect-src #{ invidious_companion_urls } " )
222+ end
220223 end
221224
222225 rendered " embed"
Original file line number Diff line number Diff line change @@ -194,14 +194,17 @@ module Invidious::Routes::Watch
194194
195195 if CONFIG .invidious_companion.present?
196196 invidious_companion = CONFIG .invidious_companion.sample
197- invidious_companion_urls = CONFIG .invidious_companion.map do |companion |
197+ invidious_companion_urls = CONFIG .invidious_companion.reject( & .builtin_proxy). map do |companion |
198198 uri =
199199 " #{ companion.public_url.scheme } ://#{ companion.public_url.host } #{ companion.public_url.port ? " :#{ companion.public_url.port } " : " " } "
200200 end .join(" " )
201- env.response.headers[" Content-Security-Policy" ] =
202- env.response.headers[" Content-Security-Policy" ]
203- .gsub(" media-src" , " media-src #{ invidious_companion_urls } " )
204- .gsub(" connect-src" , " connect-src #{ invidious_companion_urls } " )
201+
202+ if ! invidious_companion_urls.empty?
203+ env.response.headers[" Content-Security-Policy" ] =
204+ env.response.headers[" Content-Security-Policy" ]
205+ .gsub(" media-src" , " media-src #{ invidious_companion_urls } " )
206+ .gsub(" connect-src" , " connect-src #{ invidious_companion_urls } " )
207+ end
205208 end
206209
207210 templated " watch"
Original file line number Diff line number Diff line change @@ -46,6 +46,7 @@ module Invidious::Routing
4646 self .register_api_v1_routes
4747 self .register_api_manifest_routes
4848 self .register_video_playback_routes
49+ self .register_companion_routes
4950 end
5051
5152 # -------------------
You can’t perform that action at this time.
0 commit comments