summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr67
1 files changed, 54 insertions, 13 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 3780a2f0..ac9b1320 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -1712,7 +1712,14 @@ get "/subscription_manager" do |env|
format = env.params.query["format"]?
format ||= "rss"
- subscriptions = PG_DB.query_all("SELECT * FROM channels WHERE id = ANY('{#{user.subscriptions.join(",")}}')", as: InvidiousChannel)
+ if user.subscriptions.empty?
+ values = "'{}'"
+ else
+ values = "VALUES #{user.subscriptions.map { |id| %(('#{id}')) }.join(",")}"
+ end
+
+ subscriptions = PG_DB.query_all("SELECT * FROM channels WHERE id = ANY(#{values})", as: InvidiousChannel)
+
subscriptions.sort_by! { |channel| channel.author.downcase }
if action_takeout
@@ -4263,20 +4270,54 @@ end
# ...
# end
-# TODO
-# get "/api/v1/auth/subscriptions" do |env|
-# ...
-# end
+get "/api/v1/auth/subscriptions" do |env|
+ env.response.content_type = "application/json"
+ user = env.get("user").as(User)
-# TODO
-# post "/api/v1/auth/subscriptions/:ucid" do |env|
-# ...
-# end
+ if user.subscriptions.empty?
+ values = "'{}'"
+ else
+ values = "VALUES #{user.subscriptions.map { |id| %(('#{id}')) }.join(",")}"
+ end
-# TODO
-# delete "/api/v1/auth/subscriptions/:ucid" do |env|
-# ...
-# end
+ subscriptions = PG_DB.query_all("SELECT * FROM channels WHERE id = ANY(#{values})", as: InvidiousChannel)
+
+ JSON.build do |json|
+ json.array do
+ subscriptions.each do |subscription|
+ json.object do
+ json.field "author", subscription.author
+ json.field "authorId", subscription.id
+ end
+ end
+ end
+ end
+end
+
+post "/api/v1/auth/subscriptions/:ucid" do |env|
+ env.response.content_type = "application/json"
+ user = env.get("user").as(User)
+
+ ucid = env.params.url["ucid"]
+
+ if !user.subscriptions.includes? ucid
+ get_channel(ucid, PG_DB, false, false)
+ PG_DB.exec("UPDATE users SET subscriptions = array_append(subscriptions,$1) WHERE email = $2", ucid, user.email)
+ end
+
+ env.response.status_code = 204
+end
+
+delete "/api/v1/auth/subscriptions/:ucid" do |env|
+ env.response.content_type = "application/json"
+ user = env.get("user").as(User)
+
+ ucid = env.params.url["ucid"]
+
+ PG_DB.exec("UPDATE users SET subscriptions = array_remove(subscriptions,$1) WHERE email = $2", ucid, user.email)
+
+ env.response.status_code = 204
+end
get "/api/v1/auth/tokens" do |env|
env.response.content_type = "application/json"