diff --git a/src/invidious.cr b/src/invidious.cr index d7c5b80b..11490f58 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -200,6 +200,25 @@ end before_all do |env| Invidious::Routes::BeforeAll.handle(env) + + # Redirect unauthenticated users if require_login is enabled + if CONFIG.require_login && env.get?("user").nil? + path = env.request.path + allowed = { + "/login", "/register", "/api/", + "/sb/", "/vi/", "/s_p/", "/yts/", "/ggpht/", + "/api/manifest/", "/videoplayback", "/latest_version", + "/download", "/companion/", + } + + is_allowed = allowed.any? { |p| path.starts_with?(p) } + is_allowed ||= path.starts_with?("/embed/") && !CONFIG.require_login_for_embeds + + unless is_allowed + env.redirect "/login?referer=#{URI.encode_www_form(path)}" + halt env, 302 + end + end end Invidious::Routing.register_all diff --git a/src/invidious/config.cr b/src/invidious/config.cr index af76bb8e..ea813619 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -128,6 +128,8 @@ class Config property popular_enabled : Bool = true property captcha_enabled : Bool = true property login_enabled : Bool = true + property require_login : Bool = false + property require_login_for_embeds : Bool = false property registration_enabled : Bool = true property statistics_enabled : Bool = false property admins : Array(String) = [] of String