summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim Pechnikov <parallel588@gmail.com>2019-08-22 06:57:55 +0300
committerMaksim Pechnikov <parallel588@gmail.com>2019-08-22 06:57:55 +0300
commit64bfb41c553a45855e86737298185c1395bbb350 (patch)
tree52031f841b0fe98cc38a9a75f93f5abcfa6f1663
parentf740d786a37dc85d9b702dd5054d4978ee18a202 (diff)
fixed unfollow for relay actor
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub_controller.ex14
-rw-r--r--lib/pleroma/web/activity_pub/relay.ex3
-rw-r--r--lib/pleroma/web/router.ex3
-rw-r--r--test/web/activity_pub/activity_pub_controller_test.exs29
4 files changed, 48 insertions, 1 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex
index 133a726c5..e72ec5500 100644
--- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex
@@ -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),
diff --git a/lib/pleroma/web/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex
index 5f18cc64a..905e85cc6 100644
--- a/lib/pleroma/web/activity_pub/relay.ex
+++ b/lib/pleroma/web/activity_pub/relay.ex
@@ -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
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 1eb6f7b9d..469e46f5d 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -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
diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs
index 77f5e39fa..cf71066fd 100644
--- a/test/web/activity_pub/activity_pub_controller_test.exs
+++ b/test/web/activity_pub/activity_pub_controller_test.exs
@@ -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)