summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authormatthewmcgarvey <matthewmcgarvey14@gmail.com>2022-02-22 23:20:09 -0600
committermatthewmcgarvey <matthewmcgarvey14@gmail.com>2022-02-22 23:20:09 -0600
commit3b1837a99b7abfcc3950605fa7e99f7e0c92ba4d (patch)
tree587be6b26145541929b6ed17f63f3cdbdf6f7a65 /src
parentcc59de0c9310b31b002e836ffe055dfaf5cfafd7 (diff)
downloadinvidious-3b1837a99b7abfcc3950605fa7e99f7e0c92ba4d.tar.gz
invidious-3b1837a99b7abfcc3950605fa7e99f7e0c92ba4d.tar.bz2
invidious-3b1837a99b7abfcc3950605fa7e99f7e0c92ba4d.zip
Move remaining routes to new structure
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr51
-rw-r--r--src/invidious/routes/api/v1/authenticated.cr18
-rw-r--r--src/invidious/routes/captcha.cr8
-rw-r--r--src/invidious/routes/playlists.cr11
4 files changed, 44 insertions, 44 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 24f49930..dc055e59 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -154,8 +154,8 @@ if CONFIG.popular_enabled
Invidious::Jobs.register Invidious::Jobs::PullPopularVideosJob.new(PG_DB)
end
-connection_channel = Channel({Bool, Channel(PQ::Notification)}).new(32)
-Invidious::Jobs.register Invidious::Jobs::NotificationJob.new(connection_channel, CONFIG.database_url)
+CONNECTION_CHANNEL = Channel({Bool, Channel(PQ::Notification)}).new(32)
+Invidious::Jobs.register Invidious::Jobs::NotificationJob.new(CONNECTION_CHANNEL, CONFIG.database_url)
Invidious::Jobs.start_all
@@ -360,6 +360,7 @@ end
Invidious::Routing.post "/playlist_ajax", Invidious::Routes::Playlists, :playlist_ajax
Invidious::Routing.get "/playlist", Invidious::Routes::Playlists, :show
Invidious::Routing.get "/mix", Invidious::Routes::Playlists, :mix
+ Invidious::Routing.get "/watch_videos", Invidious::Routes::Playlists, :watch_videos
Invidious::Routing.get "/opensearch.xml", Invidious::Routes::Search, :opensearch
Invidious::Routing.get "/results", Invidious::Routes::Search, :results
@@ -390,6 +391,8 @@ end
Invidious::Routing.post "/subscription_ajax", Invidious::Routes::Subscriptions, :toggle_subscription
Invidious::Routing.get "/subscription_manager", Invidious::Routes::Subscriptions, :subscription_manager
+
+ Invidious::Routing.get "/Captcha", Invidious::Routes::Captcha, :get
{% end %}
Invidious::Routing.get "/ggpht/*", Invidious::Routes::Images, :ggpht
@@ -405,53 +408,13 @@ Invidious::Routing.get "/c/:user/live", Invidious::Routes::Live, :check
# API routes (macro)
define_v1_api_routes()
+Invidious::Routing.get "/api/v1/auth/notifications", Invidious::Routes::API::V1::Authenticated, :notifications_get
+Invidious::Routing.post "/api/v1/auth/notifications", Invidious::Routes::API::V1::Authenticated, :notifications_post
# Video playback (macros)
define_api_manifest_routes()
define_video_playback_routes()
-# Authenticated endpoints
-
-# The notification APIs can't be extracted yet
-# due to the requirement of the `connection_channel`
-# used by the `NotificationJob`
-
-get "/api/v1/auth/notifications" do |env|
- env.response.content_type = "text/event-stream"
-
- topics = env.params.query["topics"]?.try &.split(",").uniq.first(1000)
- topics ||= [] of String
-
- create_notification_stream(env, topics, connection_channel)
-end
-
-post "/api/v1/auth/notifications" do |env|
- env.response.content_type = "text/event-stream"
-
- topics = env.params.body["topics"]?.try &.split(",").uniq.first(1000)
- topics ||= [] of String
-
- create_notification_stream(env, topics, connection_channel)
-end
-
-get "/Captcha" do |env|
- headers = HTTP::Headers{":authority" => "accounts.google.com"}
- response = YT_POOL.client &.get(env.request.resource, headers)
- env.response.headers["Content-Type"] = response.headers["Content-Type"]
- response.body
-end
-
-# Undocumented, creates anonymous playlist with specified 'video_ids', max 50 videos
-get "/watch_videos" do |env|
- response = YT_POOL.client &.get(env.request.resource)
- if url = response.headers["Location"]?
- url = URI.parse(url).request_target
- next env.redirect url
- end
-
- env.response.status_code = response.status_code
-end
-
error 404 do |env|
if md = env.request.path.match(/^\/(?<id>([a-zA-Z0-9_-]{11})|(\w+))$/)
item = md["id"]
diff --git a/src/invidious/routes/api/v1/authenticated.cr b/src/invidious/routes/api/v1/authenticated.cr
index c27853ca..6ced4edb 100644
--- a/src/invidious/routes/api/v1/authenticated.cr
+++ b/src/invidious/routes/api/v1/authenticated.cr
@@ -397,4 +397,22 @@ module Invidious::Routes::API::V1::Authenticated
env.response.status_code = 204
end
+
+ def self.notifications_get(env)
+ env.response.content_type = "text/event-stream"
+
+ topics = env.params.query["topics"]?.try &.split(",").uniq.first(1000)
+ topics ||= [] of String
+
+ create_notification_stream(env, topics, CONNECTION_CHANNEL)
+ end
+
+ def self.notifications_post(env)
+ env.response.content_type = "text/event-stream"
+
+ topics = env.params.body["topics"]?.try &.split(",").uniq.first(1000)
+ topics ||= [] of String
+
+ create_notification_stream(env, topics, CONNECTION_CHANNEL)
+ end
end
diff --git a/src/invidious/routes/captcha.cr b/src/invidious/routes/captcha.cr
new file mode 100644
index 00000000..a1d95a4f
--- /dev/null
+++ b/src/invidious/routes/captcha.cr
@@ -0,0 +1,8 @@
+module Invidious::Routes::Captcha
+ def self.get(env)
+ headers = HTTP::Headers{":authority" => "accounts.google.com"}
+ response = YT_POOL.client &.get(env.request.resource, headers)
+ env.response.headers["Content-Type"] = response.headers["Content-Type"]
+ response.body
+ end
+end
diff --git a/src/invidious/routes/playlists.cr b/src/invidious/routes/playlists.cr
index 1ed29e79..dbeb4f97 100644
--- a/src/invidious/routes/playlists.cr
+++ b/src/invidious/routes/playlists.cr
@@ -443,4 +443,15 @@ module Invidious::Routes::Playlists
templated "mix"
end
+
+ # Undocumented, creates anonymous playlist with specified 'video_ids', max 50 videos
+ def self.watch_videos(env)
+ response = YT_POOL.client &.get(env.request.resource)
+ if url = response.headers["Location"]?
+ url = URI.parse(url).request_target
+ return env.redirect url
+ end
+
+ env.response.status_code = response.status_code
+ end
end