fixed unfollow for relay actor
authorMaksim Pechnikov <parallel588@gmail.com>
Thu, 22 Aug 2019 03:57:55 +0000 (06:57 +0300)
committerMaksim Pechnikov <parallel588@gmail.com>
Thu, 22 Aug 2019 03:57:55 +0000 (06:57 +0300)
lib/pleroma/web/activity_pub/activity_pub_controller.ex
lib/pleroma/web/activity_pub/relay.ex
lib/pleroma/web/router.ex
test/web/activity_pub/activity_pub_controller_test.exs

index 133a726c5c05a352cbe1eb9375b95deabec48995..e72ec5500bbacbbf7a1fe13de9848319826745da 100644 (file)
@@ -104,6 +104,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
     end
   end
 
+  # GET /relay/following
+  def following(%{assigns: %{relay: true}} = conn, _params) do
+    conn
+    |> put_resp_header("content-type", "application/activity+json")
+    |> json(UserView.render("following.json", %{user: Relay.get_actor()}))
+  end
+
   def following(%{assigns: %{user: for_user}} = conn, %{"nickname" => nickname, "page" => page}) do
     with %User{} = user <- User.get_cached_by_nickname(nickname),
          {user, for_user} <- ensure_user_keys_present_and_maybe_refresh_for_user(user, for_user),
@@ -131,6 +138,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
     end
   end
 
+  # GET /relay/followers
+  def followers(%{assigns: %{relay: true}} = conn, _params) do
+    conn
+    |> put_resp_header("content-type", "application/activity+json")
+    |> json(UserView.render("followers.json", %{user: Relay.get_actor()}))
+  end
+
   def followers(%{assigns: %{user: for_user}} = conn, %{"nickname" => nickname, "page" => page}) do
     with %User{} = user <- User.get_cached_by_nickname(nickname),
          {user, for_user} <- ensure_user_keys_present_and_maybe_refresh_for_user(user, for_user),
index 5f18cc64a8744726c98d580ca29a4d633636189e..905e85cc6207e21d4a693b9c1243b7916d494817 100644 (file)
@@ -36,7 +36,8 @@ defmodule Pleroma.Web.ActivityPub.Relay do
   def unfollow(target_instance) do
     with %User{} = local_user <- get_actor(),
          {:ok, %User{} = target_user} <- User.get_or_fetch_by_ap_id(target_instance),
-         {:ok, activity} <- ActivityPub.unfollow(local_user, target_user) do
+         {:ok, activity} <- ActivityPub.unfollow(local_user, target_user),
+         {:ok, _, _} <- User.unfollow(local_user, target_user) do
       Logger.info("relay: unfollowed instance: #{target_instance}: id=#{activity.data["id"]}")
       {:ok, activity}
     else
index 1eb6f7b9dedc452a298df3802ee7a24163436c28..469e46f5de8088d569e9c15cccae19963996bae1 100644 (file)
@@ -687,6 +687,9 @@ defmodule Pleroma.Web.Router do
 
     get("/", ActivityPubController, :relay)
     post("/inbox", ActivityPubController, :inbox)
+
+    get("/following", ActivityPubController, :following, assigns: %{relay: true})
+    get("/followers", ActivityPubController, :followers, assigns: %{relay: true})
   end
 
   scope "/internal/fetch", Pleroma.Web.ActivityPub do
index 77f5e39faab586fea0496258827b15fbb0c6c456..cf71066fd8b2ffa8a0d4e55db41aa604d845a675 100644 (file)
@@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
   alias Pleroma.Web.ActivityPub.ObjectView
   alias Pleroma.Web.ActivityPub.UserView
   alias Pleroma.Web.ActivityPub.Utils
+  alias Pleroma.Web.ActivityPub.Relay
   alias Pleroma.Web.CommonAPI
 
   setup_all do
@@ -593,6 +594,34 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
     end
   end
 
+  describe "/relay/followers" do
+    test "it returns relay followers", %{conn: conn} do
+      relay_actor = Relay.get_actor()
+      user = insert(:user)
+      User.follow(user, relay_actor)
+
+      result =
+        conn
+        |> assign(:relay, true)
+        |> get("/relay/followers")
+        |> json_response(200)
+
+      assert result["first"]["orderedItems"] == [user.ap_id]
+    end
+  end
+
+  describe "/relay/following" do
+    test "it returns relay following", %{conn: conn} do
+      result =
+        conn
+        |> assign(:relay, true)
+        |> get("/relay/following")
+        |> json_response(200)
+
+      assert result["first"]["orderedItems"] == []
+    end
+  end
+
   describe "/users/:nickname/followers" do
     test "it returns the followers in a collection", %{conn: conn} do
       user = insert(:user)