Add GET /api/v1/apps/verify_credentials
authoreugenijm <eugenijm@protonmail.com>
Tue, 26 Mar 2019 18:42:03 +0000 (21:42 +0300)
committereugenijm <eugenijm@protonmail.com>
Tue, 26 Mar 2019 18:53:28 +0000 (21:53 +0300)
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/mastodon_api/views/app_view.ex [new file with mode: 0644]
lib/pleroma/web/router.ex
test/web/mastodon_api/mastodon_api_controller_test.exs

index 6b7c67012cf72963720298b44484c592f4f4c520..295c8bebee88489312e78a86c5d291eff815d845 100644 (file)
@@ -18,6 +18,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   alias Pleroma.Web.ActivityPub.Visibility
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.MastodonAPI.AccountView
+  alias Pleroma.Web.MastodonAPI.AppView
   alias Pleroma.Web.MastodonAPI.FilterView
   alias Pleroma.Web.MastodonAPI.ListView
   alias Pleroma.Web.MastodonAPI.MastodonAPI
@@ -132,6 +133,14 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     json(conn, account)
   end
 
+  def verify_app_credentials(%{assigns: %{user: _user, token: token}} = conn, _) do
+    with %Token{app: %App{} = app} <- Repo.preload(token, :app) do
+      conn
+      |> put_view(AppView)
+      |> render("show.json", %{app: app})
+    end
+  end
+
   def user(%{assigns: %{user: for_user}} = conn, %{"id" => nickname_or_id}) do
     with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id),
          true <- User.auth_active?(user) || user.id == for_user.id || User.superuser?(for_user) do
diff --git a/lib/pleroma/web/mastodon_api/views/app_view.ex b/lib/pleroma/web/mastodon_api/views/app_view.ex
new file mode 100644 (file)
index 0000000..1976d4d
--- /dev/null
@@ -0,0 +1,27 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.MastodonAPI.AppView do
+  use Pleroma.Web, :view
+
+  alias Pleroma.Web.OAuth.App
+
+  def render("show.json", %{app: %App{website: webiste, client_name: name}}) do
+    result = %{
+      name: name,
+      website: webiste
+    }
+
+    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
+
+    result
+  end
+end
index befd382bac5b4e139d9ba02ab0b2e84742f81401..32e5f7644c4023a989857cae030af39bc8bfa3da 100644 (file)
@@ -328,6 +328,7 @@ defmodule Pleroma.Web.Router do
     get("/instance", MastodonAPIController, :masto_instance)
     get("/instance/peers", MastodonAPIController, :peers)
     post("/apps", MastodonAPIController, :create_app)
+    get("/apps/verify_credentials", MastodonAPIController, :verify_app_credentials)
     get("/custom_emojis", MastodonAPIController, :custom_emojis)
 
     get("/statuses/:id/card", MastodonAPIController, :status_card)
index 21e88eda94af2eeb40a0be49a5c4fdff7baad5d2..9c0fdf368dc589ed6c2257f791e42207ab860244 100644 (file)
@@ -332,6 +332,26 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
     assert id == to_string(user.id)
   end
 
+  test "apps/verify_credentials", %{conn: conn} do
+    token = insert(:oauth_token)
+
+    conn =
+      conn
+      |> assign(:user, token.user)
+      |> assign(:token, token)
+      |> get("/api/v1/apps/verify_credentials")
+
+    app = Repo.preload(token, :app).app
+
+    expected = %{
+      "name" => app.client_name,
+      "website" => app.website,
+      "vapid_key" => Pleroma.Web.Push.vapid_config() |> Keyword.get(:public_key)
+    }
+
+    assert expected == json_response(conn, 200)
+  end
+
   test "get a status", %{conn: conn} do
     activity = insert(:note_activity)