Merge f1f66289da20e153e566bc2c52eb4175f99d6d8c into 98f4f118b2e4cfeb77bd65a76df9b88ee55c33a6

This commit is contained in:
Fijxu 2026-06-04 20:01:17 -04:00 committed by GitHub
commit 3d6d8b20ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 39 additions and 13 deletions

View File

@ -205,7 +205,6 @@ https_only: false
# path: /tmp/invidious.sock # path: /tmp/invidious.sock
# permissions: 777 # permissions: 777
# ----------------------------- # -----------------------------
# Network (outbound) # Network (outbound)
# ----------------------------- # -----------------------------
@ -228,7 +227,6 @@ https_only: false
## ##
#pool_size: 100 #pool_size: 100
## ##
## Additional cookies to be sent when requesting the youtube API. ## Additional cookies to be sent when requesting the youtube API.
## ##
@ -263,7 +261,6 @@ https_only: false
# host: # host:
# port: # port:
## ##
## Use Innertube's transcripts API instead of timedtext for closed captions ## Use Innertube's transcripts API instead of timedtext for closed captions
## ##
@ -344,7 +341,6 @@ https_only: false
## ##
#statistics_enabled: false #statistics_enabled: false
# ----------------------------- # -----------------------------
# Users and accounts # Users and accounts
# ----------------------------- # -----------------------------
@ -456,12 +452,25 @@ full_refresh: false
## ##
feed_threads: 1 feed_threads: 1
##
## Setting to disable easy to abuse API endpoints that can
## be spammed and therefore blocking your Invidious instance.
##
## Useful for public instance maintainers.
##
## Notes: The following API endpoints will be disabled:
## - /api/v1/videos
## - /api/v1/clips
## - /api/v1/transcripts
##
## Accepted values: true, false
## Default: false
##
disable_abusable_api: false
jobs: jobs:
## Options for the database cleaning job ## Options for the database cleaning job
clear_expired_items: clear_expired_items:
## Enable/Disable job ## Enable/Disable job
## ##
## Accepted values: true, false ## Accepted values: true, false
@ -471,7 +480,6 @@ jobs:
## Options for the channels updater job ## Options for the channels updater job
refresh_channels: refresh_channels:
## Enable/Disable job ## Enable/Disable job
## ##
## Accepted values: true, false ## Accepted values: true, false
@ -481,7 +489,6 @@ jobs:
## Options for the RSS feeds updater job ## Options for the RSS feeds updater job
refresh_feeds: refresh_feeds:
## Enable/Disable job ## Enable/Disable job
## ##
## Accepted values: true, false ## Accepted values: true, false
@ -489,7 +496,6 @@ jobs:
## ##
enable: true enable: true
# ----------------------------- # -----------------------------
# Miscellaneous # Miscellaneous
# ----------------------------- # -----------------------------
@ -688,7 +694,6 @@ default_user_preferences:
## ##
#captions: ["", "", ""] #captions: ["", "", ""]
# ----------------------------- # -----------------------------
# Interface # Interface
# ----------------------------- # -----------------------------
@ -790,7 +795,6 @@ default_user_preferences:
## ##
#related_videos: true #related_videos: true
# ----------------------------- # -----------------------------
# Video player behavior # Video player behavior
# ----------------------------- # -----------------------------
@ -854,7 +858,6 @@ default_user_preferences:
## ##
#video_loop: false #video_loop: false
# ----------------------------- # -----------------------------
# Video playback settings # Video playback settings
# ----------------------------- # -----------------------------
@ -966,7 +969,6 @@ default_user_preferences:
## ##
#sort: published #sort: published
# ----------------------------- # -----------------------------
# Miscellaneous # Miscellaneous
# ----------------------------- # -----------------------------

View File

@ -217,6 +217,7 @@ end
Kemal.config.powered_by_header = false Kemal.config.powered_by_header = false
add_handler FilteredCompressHandler.new add_handler FilteredCompressHandler.new
add_handler APIHandler.new add_handler APIHandler.new
add_handler DisableAbusableAPIHandler.new
add_handler AuthHandler.new add_handler AuthHandler.new
add_handler DenyFrame.new add_handler DenyFrame.new

View File

@ -183,6 +183,9 @@ class Config
# Playlist length limit # Playlist length limit
property playlist_length_limit : Int32 = 500 property playlist_length_limit : Int32 = 500
# Disable easy to abuse API endpoints
property disable_abusable_api : Bool = false
def disabled?(option) def disabled?(option)
case disabled = CONFIG.disable_proxy case disabled = CONFIG.disable_proxy
when Bool when Bool

View File

@ -133,6 +133,26 @@ class APIHandler < Kemal::Handler
end end
end end
class DisableAbusableAPIHandler < Kemal::Handler
{% for method in %w(GET HEAD) %}
# This endpoints make a video request to Invidious companion.
{% for endpoint in %w(videos clips transcripts) %}
only ["/api/v1/{{ endpoint.id }}/:id"], {{ method }}
{% end %}
{% end %}
def call(env)
return call_next env unless only_match?(env) && CONFIG.disable_abusable_api
env.response.content_type = "application/json"
env.response.status_code = 403
message = {"error" => "This API endpoint has been disabled by the administrator."}.to_json
env.response.print message
env.response.close
return
end
end
class DenyFrame < Kemal::Handler class DenyFrame < Kemal::Handler
exclude ["/embed/*"] exclude ["/embed/*"]