Commit b574d97c authored by Ivan Tashkinov's avatar Ivan Tashkinov

[#468] Added support for `push` OAuth scope (Mastodon 2.4+).

parent 6fe7acd5
...@@ -1273,15 +1273,25 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do ...@@ -1273,15 +1273,25 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
defp get_or_make_app() do defp get_or_make_app() do
find_attrs = %{client_name: @local_mastodon_name, redirect_uris: "."} find_attrs = %{client_name: @local_mastodon_name, redirect_uris: "."}
scopes = ["read", "write", "follow", "push"]
with %App{} = app <- Repo.get_by(App, find_attrs) do 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} {:ok, app}
else else
_e -> _e ->
cs = cs =
App.register_changeset( App.register_changeset(
%App{}, %App{},
Map.put(find_attrs, :scopes, ["read", "write", "follow"]) Map.put(find_attrs, :scopes, scopes)
) )
Repo.insert(cs) Repo.insert(cs)
......
...@@ -93,6 +93,10 @@ defmodule Pleroma.Web.Router do ...@@ -93,6 +93,10 @@ defmodule Pleroma.Web.Router do
plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["follow"]}) plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["follow"]})
end end
pipeline :oauth_push do
plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["push"]})
end
pipeline :well_known do pipeline :well_known do
plug(:accepts, ["json", "jrd+json", "xml", "xrd+xml"]) plug(:accepts, ["json", "jrd+json", "xml", "xrd+xml"])
end end
...@@ -290,6 +294,10 @@ defmodule Pleroma.Web.Router do ...@@ -290,6 +294,10 @@ defmodule Pleroma.Web.Router do
post("/domain_blocks", MastodonAPIController, :block_domain) post("/domain_blocks", MastodonAPIController, :block_domain)
delete("/domain_blocks", MastodonAPIController, :unblock_domain) delete("/domain_blocks", MastodonAPIController, :unblock_domain)
end
scope [] do
pipe_through(:oauth_push)
post("/push/subscription", MastodonAPIController, :create_push_subscription) post("/push/subscription", MastodonAPIController, :create_push_subscription)
get("/push/subscription", MastodonAPIController, :get_push_subscription) get("/push/subscription", MastodonAPIController, :get_push_subscription)
......
...@@ -214,7 +214,7 @@ defmodule Pleroma.Factory do ...@@ -214,7 +214,7 @@ defmodule Pleroma.Factory do
%Pleroma.Web.OAuth.App{ %Pleroma.Web.OAuth.App{
client_name: "Some client", client_name: "Some client",
redirect_uris: "https://example.com/callback", redirect_uris: "https://example.com/callback",
scopes: ["read", "write", "follow"], scopes: ["read", "write", "follow", "push"],
website: "https://example.com", website: "https://example.com",
client_id: "aaabbb==", client_id: "aaabbb==",
client_secret: "aaa;/&bbb" client_secret: "aaa;/&bbb"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment