[#468] Added support for `push` OAuth scope (Mastodon 2.4+).
authorIvan Tashkinov <ivantashkinov@gmail.com>
Wed, 20 Feb 2019 14:27:41 +0000 (17:27 +0300)
committerIvan Tashkinov <ivantashkinov@gmail.com>
Wed, 20 Feb 2019 14:27:41 +0000 (17:27 +0300)
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/router.ex
test/support/factory.ex

index d484351e90365a793a118788df960218f4bc8f29..17b95eb44817301e8d0bd88ec27657d533edae88 100644 (file)
@@ -1273,15 +1273,25 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
 
   defp get_or_make_app() do
     find_attrs = %{client_name: @local_mastodon_name, redirect_uris: "."}
+    scopes = ["read", "write", "follow", "push"]
 
     with %App{} = app <- Repo.get_by(App, find_attrs) do
+      {:ok, app} =
+        if app.scopes == scopes do
+          {:ok, app}
+        else
+          app
+          |> Ecto.Changeset.change(%{scopes: scopes})
+          |> Repo.update()
+        end
+
       {:ok, app}
     else
       _e ->
         cs =
           App.register_changeset(
             %App{},
-            Map.put(find_attrs, :scopes, ["read", "write", "follow"])
+            Map.put(find_attrs, :scopes, scopes)
           )
 
         Repo.insert(cs)
index 562e24ad9497cf143e3be5381ea5631b062e76e4..559d3aa0c280c848df8cd75171c8c4978ca402ed 100644 (file)
@@ -93,6 +93,10 @@ defmodule Pleroma.Web.Router do
     plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["follow"]})
   end
 
+  pipeline :oauth_push do
+    plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["push"]})
+  end
+
   pipeline :well_known do
     plug(:accepts, ["json", "jrd+json", "xml", "xrd+xml"])
   end
@@ -290,6 +294,10 @@ defmodule Pleroma.Web.Router do
 
       post("/domain_blocks", MastodonAPIController, :block_domain)
       delete("/domain_blocks", MastodonAPIController, :unblock_domain)
+    end
+
+    scope [] do
+      pipe_through(:oauth_push)
 
       post("/push/subscription", MastodonAPIController, :create_push_subscription)
       get("/push/subscription", MastodonAPIController, :get_push_subscription)
index 0c59b3ce8cbb9ea7bef00658e04d69ca6955e650..d1956d1cd0a1095c68e7031c9a1e5f4ec779652a 100644 (file)
@@ -214,7 +214,7 @@ defmodule Pleroma.Factory do
     %Pleroma.Web.OAuth.App{
       client_name: "Some client",
       redirect_uris: "https://example.com/callback",
-      scopes: ["read", "write", "follow"],
+      scopes: ["read", "write", "follow", "push"],
       website: "https://example.com",
       client_id: "aaabbb==",
       client_secret: "aaa;/&bbb"