Return 404 if account to filter notifications from is not found
authorEgor Kislitsyn <egor@kislitsyn.com>
Thu, 19 Dec 2019 13:45:44 +0000 (20:45 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Thu, 19 Dec 2019 13:45:44 +0000 (20:45 +0700)
lib/pleroma/web/mastodon_api/controllers/notification_controller.ex
lib/pleroma/web/mastodon_api/mastodon_api.ex
test/web/mastodon_api/controllers/notification_controller_test.exs

index 16759be6a6b1ad6a7ee1ddfac5aed3aafe3f29d8..f2508aca449000ab1f7903d7f6cc2ed5444efe87 100644 (file)
@@ -23,6 +23,23 @@ defmodule Pleroma.Web.MastodonAPI.NotificationController do
   plug(Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug)
 
   # GET /api/v1/notifications
+  def index(conn, %{"account_id" => account_id} = params) do
+    case Pleroma.User.get_cached_by_id(account_id) do
+      %{ap_id: account_ap_id} ->
+        params =
+          params
+          |> Map.delete("account_id")
+          |> Map.put("account_ap_id", account_ap_id)
+
+        index(conn, params)
+
+      _ ->
+        conn
+        |> put_status(:not_found)
+        |> json(%{"error" => "Account is not found"})
+    end
+  end
+
   def index(%{assigns: %{user: user}} = conn, params) do
     notifications = MastodonAPI.get_notifications(user, params)
 
index 6c13d4df6f2dd274c50281a57edb4ed49f743aff..390a2b1909645c1f2f1cd2d3e172f78bc06e4079 100644 (file)
@@ -56,7 +56,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
     user
     |> Notification.for_user_query(options)
     |> restrict(:exclude_types, options)
-    |> restrict(:account_id, options)
+    |> restrict(:account_ap_id, options)
     |> Pagination.fetch_paginated(params)
   end
 
@@ -73,7 +73,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
       reblogs: :boolean,
       with_muted: :boolean,
       with_move: :boolean,
-      account_id: :string
+      account_ap_id: :string
     }
 
     changeset = cast({%{}, param_types}, params, Map.keys(param_types))
@@ -90,11 +90,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
     |> where([q, a], not fragment("? @> ARRAY[?->>'type']::varchar[]", ^ap_types, a.data))
   end
 
-  defp restrict(query, :account_id, %{account_id: account_id}) do
-    case User.get_cached_by_id(account_id) do
-      %{ap_id: ap_id} -> where(query, [n, a], a.actor == ^ap_id)
-      _ -> where(query, [n, a], a.actor == "fake ap id")
-    end
+  defp restrict(query, :account_ap_id, %{account_ap_id: account_ap_id}) do
+    where(query, [n, a], a.actor == ^account_ap_id)
   end
 
   defp restrict(query, _, _), do: query
index 3458776abbbd29af92dbeb0e13877a0c553227a0..24d0d49ed9bb21d148236d173715ce691850c6e5 100644 (file)
@@ -478,11 +478,11 @@ defmodule Pleroma.Web.MastodonAPI.NotificationControllerTest do
                |> get("/api/v1/notifications", %{account_id: account_id})
                |> json_response(200)
 
-      assert [] =
+      assert %{"error" => "Account is not found"} =
                conn
                |> assign(:user, user)
                |> get("/api/v1/notifications", %{account_id: "cofe"})
-               |> json_response(200)
+               |> json_response(404)
     end
   end