diff options
| -rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 4 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/utils.ex | 8 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 32 | 
3 files changed, 35 insertions, 9 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 4955243ab..d752f4f04 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -439,7 +439,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do    end    defp do_block(blocker, blocked, activity_id, local) do -    outgoing_blocks = Config.get([:activitypub, :outgoing_blocks])      unfollow_blocked = Config.get([:activitypub, :unfollow_blocked])      if unfollow_blocked do @@ -447,8 +446,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do        if follow_activity, do: unfollow(blocker, blocked, nil, local)      end -    with true <- outgoing_blocks, -         block_data <- make_block_data(blocker, blocked, activity_id), +    with block_data <- make_block_data(blocker, blocked, activity_id),           {:ok, activity} <- insert(block_data, local),           _ <- notify_and_stream(activity),           :ok <- maybe_federate(activity) do diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 09b80fa57..f2375bcc4 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do    alias Ecto.Changeset    alias Ecto.UUID    alias Pleroma.Activity +  alias Pleroma.Config    alias Pleroma.Notification    alias Pleroma.Object    alias Pleroma.Repo @@ -169,8 +170,11 @@ defmodule Pleroma.Web.ActivityPub.Utils do    Enqueues an activity for federation if it's local    """    @spec maybe_federate(any()) :: :ok -  def maybe_federate(%Activity{local: true} = activity) do -    if Pleroma.Config.get!([:instance, :federating]) do +  def maybe_federate(%Activity{local: true, data: %{"type" => type}} = activity) do +    outgoing_blocks = Config.get([:activitypub, :outgoing_blocks]) + +    with true <- Config.get!([:instance, :federating]), +         true <- type != "Block" || outgoing_blocks do        Pleroma.Web.Federator.publish(activity)      end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 0739cbfef..59bdd53cd 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1061,14 +1061,38 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do      end      test "creates a block activity" do +      clear_config([:instance, :federating], true)        blocker = insert(:user)        blocked = insert(:user) -      {:ok, activity} = ActivityPub.block(blocker, blocked) +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        {:ok, activity} = ActivityPub.block(blocker, blocked) -      assert activity.data["type"] == "Block" -      assert activity.data["actor"] == blocker.ap_id -      assert activity.data["object"] == blocked.ap_id +        assert activity.data["type"] == "Block" +        assert activity.data["actor"] == blocker.ap_id +        assert activity.data["object"] == blocked.ap_id + +        assert called(Pleroma.Web.Federator.publish(activity)) +      end +    end + +    test "works with outgoing blocks disabled, but doesn't federate" do +      clear_config([:instance, :federating], true) +      clear_config([:activitypub, :outgoing_blocks], false) +      blocker = insert(:user) +      blocked = insert(:user) + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        {:ok, activity} = ActivityPub.block(blocker, blocked) + +        assert activity.data["type"] == "Block" +        assert activity.data["actor"] == blocker.ap_id +        assert activity.data["object"] == blocked.ap_id + +        refute called(Pleroma.Web.Federator.publish(:_)) +      end      end    end  | 
