[#483] Blocked users export for TwitterAPI.
authorIvan Tashkinov <ivantashkinov@gmail.com>
Fri, 28 Dec 2018 18:08:07 +0000 (21:08 +0300)
committerIvan Tashkinov <ivantashkinov@gmail.com>
Fri, 28 Dec 2018 18:08:07 +0000 (21:08 +0300)
lib/pleroma/user.ex
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/router.ex
lib/pleroma/web/twitter_api/twitter_api_controller.ex
test/web/twitter_api/twitter_api_controller_test.exs

index 33f5e43fc4134ce5df3b20096ae50834f8d49d90..b64ed74c46bfec436eb9d227842fd60a261a82cd 100644 (file)
@@ -649,6 +649,9 @@ defmodule Pleroma.User do
       end)
   end
 
+  def blocked_users(user),
+    do: Repo.all(from(u in User, where: u.ap_id in ^user.info.blocks))
+
   def block_domain(user, domain) do
     info_cng =
       user.info
index 22715bb76bd37dede87f1dbe0c259a15341e6685..663a0fa08d2ca40d421ee49f51a3f63f7535b0df 100644 (file)
@@ -704,11 +704,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     end
   end
 
-  # TODO: Use proper query
   def blocks(%{assigns: %{user: user}} = conn, _) do
-    with blocked_users <- user.info.blocks || [],
-         accounts <- Enum.map(blocked_users, fn ap_id -> User.get_cached_by_ap_id(ap_id) end) do
-      res = AccountView.render("accounts.json", users: accounts, for: user, as: :user)
+    with blocked_accounts <- User.blocked_users(user) do
+      res = AccountView.render("accounts.json", users: blocked_accounts, for: user, as: :user)
       json(conn, res)
     end
   end
index 7ec0cabb3a0c808b76433aff74a1f39d6c4068c5..a7f78ba81220e4c5ed1421c35c23addc70570b7d 100644 (file)
@@ -281,6 +281,7 @@ defmodule Pleroma.Web.Router do
 
     get("/statuses/followers", TwitterAPI.Controller, :followers)
     get("/statuses/friends", TwitterAPI.Controller, :friends)
+    get("/statuses/blocks", TwitterAPI.Controller, :blocks)
     get("/statuses/show/:id", TwitterAPI.Controller, :fetch_status)
     get("/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation)
 
index 7ae850d71471544f3f48392bdd6fe6a55d1bafe4..c11824afc6a5e2cd8cc0f9b8c82161cfba738dc9 100644 (file)
@@ -507,6 +507,14 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     end
   end
 
+  def blocks(%{assigns: %{user: user}} = conn, _params) do
+    with blocked_users <- User.blocked_users(user) do
+      conn
+      |> put_view(UserView)
+      |> render("index.json", %{users: blocked_users, for: user})
+    end
+  end
+
   def friend_requests(conn, params) do
     with {:ok, user} <- TwitterAPI.get_user(conn.assigns[:user], params),
          {:ok, friend_requests} <- User.get_follow_requests(user) do
index 474d72df680755c018232e324d9e7e7043259f5c..e49d605bdb19ca4d8d5469ee9bc6a2c228f6216c 100644 (file)
@@ -1085,6 +1085,24 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
     end
   end
 
+  describe "GET /api/statuses/blocks" do
+    test "it returns the list of users blocked by requester", %{conn: conn} do
+      user = insert(:user)
+      other_user = insert(:user)
+
+      {:ok, user} = User.block(user, other_user)
+
+      conn =
+        conn
+        |> assign(:user, user)
+        |> get("/api/statuses/blocks")
+
+      expected = UserView.render("index.json", %{users: [other_user], for: user})
+      result = json_response(conn, 200)
+      assert Enum.sort(expected) == Enum.sort(result)
+    end
+  end
+
   describe "GET /api/statuses/friends" do
     test "it returns the logged in user's friends", %{conn: conn} do
       user = insert(:user)