Add vapid_key to the `POST /api/v1/apps` response

This commit is contained in:
eugenijm 2019-03-26 23:21:31 +03:00
parent 691d1208b5
commit a4ab60ac54
3 changed files with 60 additions and 24 deletions

View File

@ -52,16 +52,9 @@ def create_app(conn, params) do
with cs <- App.register_changeset(%App{}, app_attrs), with cs <- App.register_changeset(%App{}, app_attrs),
false <- cs.changes[:client_name] == @local_mastodon_name, false <- cs.changes[:client_name] == @local_mastodon_name,
{:ok, app} <- Repo.insert(cs) do {:ok, app} <- Repo.insert(cs) do
res = %{ conn
id: app.id |> to_string, |> put_view(AppView)
name: app.client_name, |> render("show.json", %{app: app})
client_id: app.client_id,
client_secret: app.client_secret,
redirect_uri: app.redirect_uris,
website: app.website
}
json(conn, res)
end end
end end
@ -137,7 +130,7 @@ def verify_app_credentials(%{assigns: %{user: _user, token: token}} = conn, _) d
with %Token{app: %App{} = app} <- Repo.preload(token, :app) do with %Token{app: %App{} = app} <- Repo.preload(token, :app) do
conn conn
|> put_view(AppView) |> put_view(AppView)
|> render("show.json", %{app: app}) |> render("short.json", %{app: app})
end end
end end

View File

@ -7,21 +7,35 @@ defmodule Pleroma.Web.MastodonAPI.AppView do
alias Pleroma.Web.OAuth.App alias Pleroma.Web.OAuth.App
def render("show.json", %{app: %App{website: webiste, client_name: name}}) do @vapid_key :web_push_encryption
result = %{ |> Application.get_env(:vapid_details, [])
|> Keyword.get(:public_key)
def render("show.json", %{app: %App{} = app}) do
%{
id: app.id |> to_string,
name: app.client_name,
client_id: app.client_id,
client_secret: app.client_secret,
redirect_uri: app.redirect_uris,
website: app.website
}
|> with_vapid_key()
end
def render("short.json", %{app: %App{website: webiste, client_name: name}}) do
%{
name: name, name: name,
website: webiste website: webiste
} }
|> with_vapid_key()
vapid_key = Pleroma.Web.Push.vapid_config() |> Keyword.get(:public_key)
result =
if vapid_key do
Map.put(result, "vapid_key", vapid_key)
else
result
end end
result defp with_vapid_key(data) do
if @vapid_key do
Map.put(data, "vapid_key", @vapid_key)
else
data
end
end end
end end

View File

@ -14,7 +14,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI
alias Pleroma.Web.MastodonAPI.FilterView alias Pleroma.Web.MastodonAPI.FilterView
alias Pleroma.Web.OAuth.App
alias Pleroma.Web.OStatus alias Pleroma.Web.OStatus
alias Pleroma.Web.Push
alias Pleroma.Web.TwitterAPI.TwitterAPI alias Pleroma.Web.TwitterAPI.TwitterAPI
import Pleroma.Factory import Pleroma.Factory
import ExUnit.CaptureLog import ExUnit.CaptureLog
@ -346,7 +348,34 @@ test "apps/verify_credentials", %{conn: conn} do
expected = %{ expected = %{
"name" => app.client_name, "name" => app.client_name,
"website" => app.website, "website" => app.website,
"vapid_key" => Pleroma.Web.Push.vapid_config() |> Keyword.get(:public_key) "vapid_key" => Push.vapid_config() |> Keyword.get(:public_key)
}
assert expected == json_response(conn, 200)
end
test "creates an oauth app", %{conn: conn} do
user = insert(:user)
app_attrs = build(:oauth_app)
conn =
conn
|> assign(:user, user)
|> post("/api/v1/apps", %{
client_name: app_attrs.client_name,
redirect_uris: app_attrs.redirect_uris
})
[app] = Repo.all(App)
expected = %{
"name" => app.client_name,
"website" => app.website,
"client_id" => app.client_id,
"client_secret" => app.client_secret,
"id" => app.id |> to_string(),
"redirect_uri" => app.redirect_uris,
"vapid_key" => Push.vapid_config() |> Keyword.get(:public_key)
} }
assert expected == json_response(conn, 200) assert expected == json_response(conn, 200)