From bceb7a61efddb65438c904462fa7d97e8baeccba Mon Sep 17 00:00:00 2001 From: Fijxu Date: Fri, 28 Feb 2025 20:06:09 -0300 Subject: [PATCH] feat: Detect videoplayback proxy from invidious-companion and add it to the CSP header --- src/invidious.cr | 4 ++++ src/invidious/helpers/backend_info.cr | 17 +++++++++++++++++ src/invidious/jobs/backend_checker.cr | 13 +++++++++++++ src/invidious/routes/before_all.cr | 5 +++++ 4 files changed, 39 insertions(+) create mode 100644 src/invidious/helpers/backend_info.cr create mode 100644 src/invidious/jobs/backend_checker.cr diff --git a/src/invidious.cr b/src/invidious.cr index 3bb59b97..2acc860b 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -222,6 +222,10 @@ else LOGGER.info("jobs: Disabling RefreshSessionTokens job. Invidious will use the tokens that are on the configuration file") end +if CONFIG.invidious_companion.present? + Invidious::Jobs.register Invidious::Jobs::CheckBackend.new +end + Invidious::Jobs.start_all def popular_videos diff --git a/src/invidious/helpers/backend_info.cr b/src/invidious/helpers/backend_info.cr new file mode 100644 index 00000000..ce8bb0d7 --- /dev/null +++ b/src/invidious/helpers/backend_info.cr @@ -0,0 +1,17 @@ +module BackendInfo + extend self + @@exvpp_url : String = "" + + def get_videoplayback_proxy + begin + response = HTTP::Client.get "#{CONFIG.invidious_companion.sample.private_url}/info" + exvpp_url = JSON.parse(response.body)["external_videoplayback_proxy"].to_s + @@exvpp_url = exvpp_url + rescue + end + end + + def get_exvpp + return @@exvpp_url + end +end diff --git a/src/invidious/jobs/backend_checker.cr b/src/invidious/jobs/backend_checker.cr new file mode 100644 index 00000000..7b251947 --- /dev/null +++ b/src/invidious/jobs/backend_checker.cr @@ -0,0 +1,13 @@ +class Invidious::Jobs::CheckBackend < Invidious::Jobs::BaseJob + def initialize + end + + def begin + loop do + BackendInfo.get_videoplayback_proxy + LOGGER.info("Backend Checker: Done, sleeping for 60 seconds") + sleep 60.seconds + Fiber.yield + end + end +end diff --git a/src/invidious/routes/before_all.cr b/src/invidious/routes/before_all.cr index 8bfde738..e49bb300 100644 --- a/src/invidious/routes/before_all.cr +++ b/src/invidious/routes/before_all.cr @@ -26,6 +26,11 @@ module Invidious::Routes::BeforeAll if CONFIG.invidious_companion.present? extra_media_csp = " #{CONFIG.invidious_companion.sample.public_url}" extra_connect_csp = " #{CONFIG.invidious_companion.sample.public_url}" + exvpp_url = BackendInfo.get_exvpp + if !exvpp_url.empty? + extra_media_csp += " #{exvpp_url}" + extra_connect_csp += " #{exvpp_url}" + end end if !CONFIG.external_videoplayback_proxy.empty?