diff --git a/src/invidious/routes/before_all.cr b/src/invidious/routes/before_all.cr index 08e7608b..ae8f997d 100644 --- a/src/invidious/routes/before_all.cr +++ b/src/invidious/routes/before_all.cr @@ -1,6 +1,7 @@ module Invidious::Routes::BeforeAll def self.handle(env) preferences = Preferences.from_json("{}") + host = env.request.headers["Host"] begin if prefs_cookie = env.request.cookies["PREFS"]? @@ -24,25 +25,16 @@ module Invidious::Routes::BeforeAll extra_connect_csp = "" if CONFIG.invidious_companion.present? - CONFIG.invidious_companion.each_with_index do |companion, index| - if companion.domain.each_with_index do |domain, domain_index| - if domain == env.request.headers["Host"] - env.set "current_companion", index - env.set "companion_public_url", companion.public_url.to_s - env.set "domain_index", domain_index - if domain_index == 2 - env.set "companion_public_url", companion.i2p_public_url.to_s - end - break - end - end - end - break if env.get?("current_companion") - end + current_companion_d = host.split(".")[0].scan(/(\d+)$/).last?.try &.[0].to_i - if env.get?("current_companion").try &.as(Int32) == nil + if current_companion_d + current_companion_d = current_companion_d - 1 + env.set "using_domain", true + env.set "current_companion", current_companion_d + env.set "companion_public_url", CONFIG.invidious_companion[current_companion_d].public_url.to_s + else if !env.request.cookies[CONFIG.server_id_cookie_name]? - env.response.cookies[CONFIG.server_id_cookie_name] = Invidious::User::Cookies.server_id(env.request.headers["Host"]) + env.response.cookies[CONFIG.server_id_cookie_name] = Invidious::User::Cookies.server_id(host) end begin @@ -53,7 +45,7 @@ module Invidious::Routes::BeforeAll if current_companion > CONFIG.invidious_companion.size current_companion = current_companion % CONFIG.invidious_companion.size - env.response.cookies[CONFIG.server_id_cookie_name] = Invidious::User::Cookies.server_id(env.request.headers["Host"], current_companion) + env.response.cookies[CONFIG.server_id_cookie_name] = Invidious::User::Cookies.server_id(host, current_companion) end env.set "current_companion", current_companion diff --git a/src/invidious/views/template.ecr b/src/invidious/views/template.ecr index fd07ec4c..515a8836 100644 --- a/src/invidious/views/template.ecr +++ b/src/invidious/views/template.ecr @@ -109,16 +109,17 @@ <% if CONFIG.invidious_companion.present? current_backend = env.get?("current_companion").try &.as(Int32) - domain_index = env.get?("domain_index").try &.as(Int32) + domain = env.get?("using_domain") scheme = env.get("scheme") status = BackendInfo.get_status %>
Switch Backend: - <% if domain_index && domain_index != 2 %> + <% if domain %> <% CONFIG.invidious_companion.each_with_index do | companion, index | %> - <% is_current_backend_host = companion.domain[domain_index] == env.request.headers["Host"] %> - display: inline-block;"> + <% host_backend = env.request.headers["Host"].sub(/([^.]+)(\d+)/, "\\1#{index+1}") %> + <% is_current_backend_host = host_backend == env.request.headers["Host"] %> + display: inline-block;"> Backend<%= HTML.escape((index + 1).to_s) %> <%= HTML.escape(companion.note) %>