This commit is contained in:
Richard Lora 2024-05-03 14:01:01 -04:00 committed by GitHub
commit b98b8dfcdd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 97 additions and 42 deletions

View File

@ -210,6 +210,22 @@ https_only: false
## ##
#popular_enabled: true #popular_enabled: true
##
## Enable/Disable the "Trending" tab on the main page.
##
## Accepted values: true, false
## Default: true
##
#trending_enabled: true
##
## Enable/Disable "Search" on the main page.
##
## Accepted values: true, false
## Default: true
##
#search_enabled: true
## ##
## Enable/Disable statstics (available at /api/v1/stats). ## Enable/Disable statstics (available at /api/v1/stats).
## The following data is available: ## The following data is available:

View File

@ -91,6 +91,8 @@ class Config
# Subscribe to channels using PubSubHubbub (requires domain, hmac_key) # Subscribe to channels using PubSubHubbub (requires domain, hmac_key)
property use_pubsub_feeds : Bool | Int32 = false property use_pubsub_feeds : Bool | Int32 = false
property popular_enabled : Bool = true property popular_enabled : Bool = true
property trending_enabled : Bool = true
property search_enabled : Bool = true
property captcha_enabled : Bool = true property captcha_enabled : Bool = true
property login_enabled : Bool = true property login_enabled : Bool = true
property registration_enabled : Bool = true property registration_enabled : Bool = true

View File

@ -4,6 +4,11 @@ module Invidious::Routes::API::V1::Feeds
env.response.content_type = "application/json" env.response.content_type = "application/json"
if !CONFIG.trending_enabled
error_message = {"error" => "Administrator has disabled this endpoint."}.to_json
haltf env, 403, error_message
end
region = env.params.query["region"]? region = env.params.query["region"]?
trending_type = env.params.query["type"]? trending_type = env.params.query["type"]?
@ -31,7 +36,7 @@ module Invidious::Routes::API::V1::Feeds
if !CONFIG.popular_enabled if !CONFIG.popular_enabled
error_message = {"error" => "Administrator has disabled this endpoint."}.to_json error_message = {"error" => "Administrator has disabled this endpoint."}.to_json
haltf env, 400, error_message haltf env, 403, error_message
end end
JSON.build do |json| JSON.build do |json|

View File

@ -5,6 +5,11 @@ module Invidious::Routes::API::V1::Search
env.response.content_type = "application/json" env.response.content_type = "application/json"
if !CONFIG.search_enabled
error_message = {"error" => "Administrator has disabled this endpoint."}.to_json
haltf env, 403, error_message
end
query = Invidious::Search::Query.new(env.params.query, :regular, region) query = Invidious::Search::Query.new(env.params.query, :regular, region)
begin begin

View File

@ -45,19 +45,24 @@ module Invidious::Routes::Feeds
def self.trending(env) def self.trending(env)
locale = env.get("preferences").as(Preferences).locale locale = env.get("preferences").as(Preferences).locale
trending_type = env.params.query["type"]? if CONFIG.trending_enabled
trending_type ||= "Default" trending_type = env.params.query["type"]?
trending_type ||= "Default"
region = env.params.query["region"]? region = env.params.query["region"]?
region ||= env.get("preferences").as(Preferences).region region ||= env.get("preferences").as(Preferences).region
begin begin
trending, plid = fetch_trending(trending_type, region, locale) trending, plid = fetch_trending(trending_type, region, locale)
rescue ex rescue ex
return error_template(500, ex) return error_template(500, ex)
end
templated "feeds/trending"
else
message = translate(locale, "The Trending feed has been disabled by the administrator.")
templated "message"
end end
templated "feeds/trending"
end end
def self.subscriptions(env) def self.subscriptions(env)

View File

@ -198,6 +198,14 @@ module Invidious::Routes::PreferencesRoute
popular_enabled ||= "off" popular_enabled ||= "off"
CONFIG.popular_enabled = popular_enabled == "on" CONFIG.popular_enabled = popular_enabled == "on"
trending_enabled = env.params.body["trending_enabled"]?.try &.as(String)
trending_enabled ||= "off"
CONFIG.trending_enabled = trending_enabled == "on"
search_enabled = env.params.body["search_enabled"]?.try &.as(String)
search_enabled ||= "off"
CONFIG.search_enabled = search_enabled == "on"
captcha_enabled = env.params.body["captcha_enabled"]?.try &.as(String) captcha_enabled = env.params.body["captcha_enabled"]?.try &.as(String)
captcha_enabled ||= "off" captcha_enabled ||= "off"
CONFIG.captcha_enabled = captcha_enabled == "on" CONFIG.captcha_enabled = captcha_enabled == "on"

View File

@ -40,41 +40,46 @@ module Invidious::Routes::Search
prefs = env.get("preferences").as(Preferences) prefs = env.get("preferences").as(Preferences)
locale = prefs.locale locale = prefs.locale
region = env.params.query["region"]? || prefs.region if CONFIG.search_enabled
region = env.params.query["region"]? || prefs.region
query = Invidious::Search::Query.new(env.params.query, :regular, region) query = Invidious::Search::Query.new(env.params.query, :regular, region)
if query.empty? if query.empty?
# Display the full page search box implemented in #1977 # Display the full page search box implemented in #1977
env.set "search", "" env.set "search", ""
templated "search_homepage", navbar_search: false templated "search_homepage", navbar_search: false
else
user = env.get? "user"
begin
items = query.process
rescue ex : ChannelSearchException
return error_template(404, "Unable to find channel with id of '#{HTML.escape(ex.channel)}'. Are you sure that's an actual channel id? It should look like 'UC4QobU6STFB0P71PMvOGN5A'.")
rescue ex
return error_template(500, ex)
end
redirect_url = Invidious::Frontend::Misc.redirect_url(env)
# Pagination
page_nav_html = Frontend::Pagination.nav_numeric(locale,
base_url: "/search?#{query.to_http_params}",
current_page: query.page,
show_next: (items.size >= 20)
)
if query.type == Invidious::Search::Query::Type::Channel
env.set "search", "channel:#{query.channel} #{query.text}"
else else
env.set "search", query.text user = env.get? "user"
end
templated "search" begin
items = query.process
rescue ex : ChannelSearchException
return error_template(404, "Unable to find channel with id of '#{HTML.escape(ex.channel)}'. Are you sure that's an actual channel id? It should look like 'UC4QobU6STFB0P71PMvOGN5A'.")
rescue ex
return error_template(500, ex)
end
redirect_url = Invidious::Frontend::Misc.redirect_url(env)
# Pagination
page_nav_html = Frontend::Pagination.nav_numeric(locale,
base_url: "/search?#{query.to_http_params}",
current_page: query.page,
show_next: (items.size >= 20)
)
if query.type == Invidious::Search::Query::Type::Channel
env.set "search", "channel:#{query.channel} #{query.text}"
else
env.set "search", query.text
end
templated "search"
end
else
message = translate(locale, "Search has been disabled by the administrator.")
templated "message"
end end
end end

View File

@ -287,6 +287,15 @@
<input name="popular_enabled" id="popular_enabled" type="checkbox" <% if CONFIG.popular_enabled %>checked<% end %>> <input name="popular_enabled" id="popular_enabled" type="checkbox" <% if CONFIG.popular_enabled %>checked<% end %>>
</div> </div>
<div class="pure-control-group">
<label for="trending_enabled"><%= translate(locale, "Trending enabled: ") %></label>
<input name="trending_enabled" id="trending_enabled" type="checkbox" <% if CONFIG.trending_enabled %>checked<% end %>>
</div>
<div class="pure-control-group">
<label for="search_enabled"><%= translate(locale, "Search enabled: ") %></label>
<input name="search_enabled" id="search_enabled" type="checkbox" <% if CONFIG.search_enabled %>checked<% end %>>
</div>
<div class="pure-control-group"> <div class="pure-control-group">
<label for="captcha_enabled"><%= translate(locale, "CAPTCHA enabled: ") %></label> <label for="captcha_enabled"><%= translate(locale, "CAPTCHA enabled: ") %></label>