- Mastodon API: `/api/v1/update_credentials` accepts `actor_type` field.
- Captcha: Support native provider
- Captcha: Enable by default
+- Mastodon API: Add support for `account_id` param to filter notifications by the account
</details>
### Fixed
user
|> Notification.for_user_query(options)
|> restrict(:exclude_types, options)
+ |> restrict(:account_id, options)
|> Pagination.fetch_paginated(params)
end
exclude_visibilities: {:array, :string},
reblogs: :boolean,
with_muted: :boolean,
- with_move: :boolean
+ with_move: :boolean,
+ account_id: :string
}
changeset = cast({%{}, param_types}, params, Map.keys(param_types))
|> 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
+ end
+
defp restrict(query, _, _), do: query
end
assert length(json_response(conn, 200)) == 1
end
+ describe "from specified user" do
+ test "account_id", %{conn: conn} do
+ user = insert(:user)
+ %{id: account_id} = other_user1 = insert(:user)
+ other_user2 = insert(:user)
+
+ {:ok, _activity} = CommonAPI.post(other_user1, %{"status" => "hi @#{user.nickname}"})
+ {:ok, _activity} = CommonAPI.post(other_user2, %{"status" => "bye @#{user.nickname}"})
+
+ assert [%{"account" => %{"id" => ^account_id}}] =
+ conn
+ |> assign(:user, user)
+ |> get("/api/v1/notifications", %{account_id: account_id})
+ |> json_response(200)
+
+ assert [] =
+ conn
+ |> assign(:user, user)
+ |> get("/api/v1/notifications", %{account_id: "cofe"})
+ |> json_response(200)
+ end
+ end
+
defp get_notification_id_by_activity(%{id: id}) do
Notification
|> Repo.get_by(activity_id: id)