diff options
| author | Omar Roth <omarroth@hotmail.com> | 2019-04-22 10:40:29 -0500 |
|---|---|---|
| committer | Omar Roth <omarroth@hotmail.com> | 2019-04-22 10:40:29 -0500 |
| commit | 250860d92c166b06d4af5d713ec2640a5ad4e701 (patch) | |
| tree | 54950bf5cb5790e5c3e33e138d6240e08ade0254 /src | |
| parent | 64aecba7a020f85993f3ce06246d8793fa948b52 (diff) | |
| download | invidious-250860d92c166b06d4af5d713ec2640a5ad4e701.tar.gz invidious-250860d92c166b06d4af5d713ec2640a5ad4e701.tar.bz2 invidious-250860d92c166b06d4af5d713ec2640a5ad4e701.zip | |
Add '/api/v1/auth/subscriptions'
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious.cr | 67 |
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" |
