diff --git a/src/invidious.cr b/src/invidious.cr index d7c5b80b..6e20cbb3 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -200,6 +200,21 @@ 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/", + } + unless allowed.any? { |p| path.starts_with?(p) } + env.redirect "/login?return_path=#{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..dab1e42a 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -128,6 +128,7 @@ class Config property popular_enabled : Bool = true property captcha_enabled : Bool = true property login_enabled : Bool = true + property require_login : Bool = false property registration_enabled : Bool = true property statistics_enabled : Bool = false property admins : Array(String) = [] of String