routing: register API routes with a function, rather than a macro

This commit is contained in:
Samantaz Fox 2022-08-10 00:07:47 +02:00
parent e22cc73f32
commit 176247091d
No known key found for this signature in database
GPG key ID: F42821059186176E
2 changed files with 61 additions and 54 deletions

View file

@ -420,7 +420,7 @@ Invidious::Routing.get "/yts/img/:name", Invidious::Routes::Images, :yts_image
Invidious::Routing.get "/vi/:id/:name", Invidious::Routes::Images, :thumbnails Invidious::Routing.get "/vi/:id/:name", Invidious::Routes::Images, :thumbnails
# API routes (macro) # API routes (macro)
define_v1_api_routes() Invidious::Routing.register_api_v1_routes
# Video playback (macros) # Video playback (macros)
define_api_manifest_routes() define_api_manifest_routes()

View file

@ -11,6 +11,10 @@ module Invidious::Routing
{% end %} {% end %}
# -------------------
# Invidious routes
# -------------------
def register_user_routes def register_user_routes
# User login/out # User login/out
get "/login", Routes::Login, :login_page get "/login", Routes::Login, :login_page
@ -39,75 +43,78 @@ module Invidious::Routing
post "/subscription_ajax", Routes::Subscriptions, :toggle_subscription post "/subscription_ajax", Routes::Subscriptions, :toggle_subscription
get "/subscription_manager", Routes::Subscriptions, :subscription_manager get "/subscription_manager", Routes::Subscriptions, :subscription_manager
end end
end
macro define_v1_api_routes # -------------------
{{namespace = Invidious::Routes::API::V1}} # API routes
# Videos # -------------------
Invidious::Routing.get "/api/v1/videos/:id", {{namespace}}::Videos, :videos
Invidious::Routing.get "/api/v1/storyboards/:id", {{namespace}}::Videos, :storyboards
Invidious::Routing.get "/api/v1/captions/:id", {{namespace}}::Videos, :captions
Invidious::Routing.get "/api/v1/annotations/:id", {{namespace}}::Videos, :annotations
Invidious::Routing.get "/api/v1/comments/:id", {{namespace}}::Videos, :comments
# Feeds def register_api_v1_routes
Invidious::Routing.get "/api/v1/trending", {{namespace}}::Feeds, :trending {% begin %}
Invidious::Routing.get "/api/v1/popular", {{namespace}}::Feeds, :popular {{namespace = Routes::API::V1}}
# Channels # Videos
Invidious::Routing.get "/api/v1/channels/:ucid", {{namespace}}::Channels, :home get "/api/v1/videos/:id", {{namespace}}::Videos, :videos
{% for route in {"videos", "latest", "playlists", "community", "search"} %} get "/api/v1/storyboards/:id", {{namespace}}::Videos, :storyboards
Invidious::Routing.get "/api/v1/channels/#{{{route}}}/:ucid", {{namespace}}::Channels, :{{route}} get "/api/v1/captions/:id", {{namespace}}::Videos, :captions
Invidious::Routing.get "/api/v1/channels/:ucid/#{{{route}}}", {{namespace}}::Channels, :{{route}} get "/api/v1/annotations/:id", {{namespace}}::Videos, :annotations
{% end %} get "/api/v1/comments/:id", {{namespace}}::Videos, :comments
# 301 redirects to new /api/v1/channels/community/:ucid and /:ucid/community # Feeds
Invidious::Routing.get "/api/v1/channels/comments/:ucid", {{namespace}}::Channels, :channel_comments_redirect get "/api/v1/trending", {{namespace}}::Feeds, :trending
Invidious::Routing.get "/api/v1/channels/:ucid/comments", {{namespace}}::Channels, :channel_comments_redirect get "/api/v1/popular", {{namespace}}::Feeds, :popular
# Channels
get "/api/v1/channels/:ucid", {{namespace}}::Channels, :home
{% for route in {"videos", "latest", "playlists", "community", "search"} %}
get "/api/v1/channels/#{{{route}}}/:ucid", {{namespace}}::Channels, :{{route}}
get "/api/v1/channels/:ucid/#{{{route}}}", {{namespace}}::Channels, :{{route}}
{% end %}
# Search # 301 redirects to new /api/v1/channels/community/:ucid and /:ucid/community
Invidious::Routing.get "/api/v1/search", {{namespace}}::Search, :search get "/api/v1/channels/comments/:ucid", {{namespace}}::Channels, :channel_comments_redirect
Invidious::Routing.get "/api/v1/search/suggestions", {{namespace}}::Search, :search_suggestions get "/api/v1/channels/:ucid/comments", {{namespace}}::Channels, :channel_comments_redirect
# Authenticated # Search
get "/api/v1/search", {{namespace}}::Search, :search
get "/api/v1/search/suggestions", {{namespace}}::Search, :search_suggestions
# The notification APIs cannot be extracted yet! They require the *local* notifications constant defined in invidious.cr # Authenticated
#
# Invidious::Routing.get "/api/v1/auth/notifications", {{namespace}}::Authenticated, :notifications
# Invidious::Routing.post "/api/v1/auth/notifications", {{namespace}}::Authenticated, :notifications
Invidious::Routing.get "/api/v1/auth/preferences", {{namespace}}::Authenticated, :get_preferences # The notification APIs cannot be extracted yet! They require the *local* notifications constant defined in invidious.cr
Invidious::Routing.post "/api/v1/auth/preferences", {{namespace}}::Authenticated, :set_preferences #
# Invidious::Routing.get "/api/v1/auth/notifications", {{namespace}}::Authenticated, :notifications
# Invidious::Routing.post "/api/v1/auth/notifications", {{namespace}}::Authenticated, :notifications
Invidious::Routing.get "/api/v1/auth/feed", {{namespace}}::Authenticated, :feed get "/api/v1/auth/preferences", {{namespace}}::Authenticated, :get_preferences
post "/api/v1/auth/preferences", {{namespace}}::Authenticated, :set_preferences
Invidious::Routing.get "/api/v1/auth/subscriptions", {{namespace}}::Authenticated, :get_subscriptions get "/api/v1/auth/feed", {{namespace}}::Authenticated, :feed
Invidious::Routing.post "/api/v1/auth/subscriptions/:ucid", {{namespace}}::Authenticated, :subscribe_channel
Invidious::Routing.delete "/api/v1/auth/subscriptions/:ucid", {{namespace}}::Authenticated, :unsubscribe_channel
get "/api/v1/auth/subscriptions", {{namespace}}::Authenticated, :get_subscriptions
post "/api/v1/auth/subscriptions/:ucid", {{namespace}}::Authenticated, :subscribe_channel
delete "/api/v1/auth/subscriptions/:ucid", {{namespace}}::Authenticated, :unsubscribe_channel
Invidious::Routing.get "/api/v1/auth/playlists", {{namespace}}::Authenticated, :list_playlists get "/api/v1/auth/playlists", {{namespace}}::Authenticated, :list_playlists
Invidious::Routing.post "/api/v1/auth/playlists", {{namespace}}::Authenticated, :create_playlist post "/api/v1/auth/playlists", {{namespace}}::Authenticated, :create_playlist
Invidious::Routing.patch "/api/v1/auth/playlists/:plid",{{namespace}}:: Authenticated, :update_playlist_attribute patch "/api/v1/auth/playlists/:plid",{{namespace}}:: Authenticated, :update_playlist_attribute
Invidious::Routing.delete "/api/v1/auth/playlists/:plid", {{namespace}}::Authenticated, :delete_playlist delete "/api/v1/auth/playlists/:plid", {{namespace}}::Authenticated, :delete_playlist
post "/api/v1/auth/playlists/:plid/videos", {{namespace}}::Authenticated, :insert_video_into_playlist
delete "/api/v1/auth/playlists/:plid/videos/:index", {{namespace}}::Authenticated, :delete_video_in_playlist
get "/api/v1/auth/tokens", {{namespace}}::Authenticated, :get_tokens
post "/api/v1/auth/tokens/register", {{namespace}}::Authenticated, :register_token
post "/api/v1/auth/tokens/unregister", {{namespace}}::Authenticated, :unregister_token
Invidious::Routing.post "/api/v1/auth/playlists/:plid/videos", {{namespace}}::Authenticated, :insert_video_into_playlist get "/api/v1/auth/notifications", {{namespace}}::Authenticated, :notifications
Invidious::Routing.delete "/api/v1/auth/playlists/:plid/videos/:index", {{namespace}}::Authenticated, :delete_video_in_playlist post "/api/v1/auth/notifications", {{namespace}}::Authenticated, :notifications
Invidious::Routing.get "/api/v1/auth/tokens", {{namespace}}::Authenticated, :get_tokens # Misc
Invidious::Routing.post "/api/v1/auth/tokens/register", {{namespace}}::Authenticated, :register_token get "/api/v1/stats", {{namespace}}::Misc, :stats
Invidious::Routing.post "/api/v1/auth/tokens/unregister", {{namespace}}::Authenticated, :unregister_token get "/api/v1/playlists/:plid", {{namespace}}::Misc, :get_playlist
get "/api/v1/auth/playlists/:plid", {{namespace}}::Misc, :get_playlist
Invidious::Routing.get "/api/v1/auth/notifications", {{namespace}}::Authenticated, :notifications get "/api/v1/mixes/:rdid", {{namespace}}::Misc, :mixes
Invidious::Routing.post "/api/v1/auth/notifications", {{namespace}}::Authenticated, :notifications {% end %}
end
# Misc
Invidious::Routing.get "/api/v1/stats", {{namespace}}::Misc, :stats
Invidious::Routing.get "/api/v1/playlists/:plid", {{namespace}}::Misc, :get_playlist
Invidious::Routing.get "/api/v1/auth/playlists/:plid", {{namespace}}::Misc, :get_playlist
Invidious::Routing.get "/api/v1/mixes/:rdid", {{namespace}}::Misc, :mixes
end end
macro define_api_manifest_routes macro define_api_manifest_routes