diff options
| -rw-r--r-- | lib/pleroma/web/activity_pub/mrf/object_age_policy.ex | 13 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/object_age_policy_test.exs | 42 | 
2 files changed, 51 insertions, 4 deletions
diff --git a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex index 5f111c72f..d45d2d7e3 100644 --- a/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/object_age_policy.ex @@ -37,8 +37,13 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do    defp check_delist(message, actions) do      if :delist in actions do        with %User{} = user <- User.get_cached_by_ap_id(message["actor"]) do -        to = List.delete(message["to"], Pleroma.Constants.as_public()) ++ [user.follower_address] -        cc = List.delete(message["cc"], user.follower_address) ++ [Pleroma.Constants.as_public()] +        to = +          List.delete(message["to"] || [], Pleroma.Constants.as_public()) ++ +            [user.follower_address] + +        cc = +          List.delete(message["cc"] || [], user.follower_address) ++ +            [Pleroma.Constants.as_public()]          message =            message @@ -58,8 +63,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do    defp check_strip_followers(message, actions) do      if :strip_followers in actions do        with %User{} = user <- User.get_cached_by_ap_id(message["actor"]) do -        to = List.delete(message["to"], user.follower_address) -        cc = List.delete(message["cc"], user.follower_address) +        to = List.delete(message["to"] || [], user.follower_address) +        cc = List.delete(message["cc"] || [], user.follower_address)          message =            message diff --git a/test/web/activity_pub/mrf/object_age_policy_test.exs b/test/web/activity_pub/mrf/object_age_policy_test.exs index b0fb753bd..cf6acc9a2 100644 --- a/test/web/activity_pub/mrf/object_age_policy_test.exs +++ b/test/web/activity_pub/mrf/object_age_policy_test.exs @@ -38,6 +38,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do    end    describe "with reject action" do +    test "works with objects with empty to or cc fields" do +      Config.put([:mrf_object_age, :actions], [:reject]) + +      data = +        get_old_message() +        |> Map.put("cc", nil) +        |> Map.put("to", nil) + +      assert match?({:reject, _}, ObjectAgePolicy.filter(data)) +    end +      test "it rejects an old post" do        Config.put([:mrf_object_age, :actions], [:reject]) @@ -56,6 +67,21 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do    end    describe "with delist action" do +    test "works with objects with empty to or cc fields" do +      Config.put([:mrf_object_age, :actions], [:delist]) + +      data = +        get_old_message() +        |> Map.put("cc", nil) +        |> Map.put("to", nil) + +      {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) + +      {:ok, data} = ObjectAgePolicy.filter(data) + +      assert Visibility.get_visibility(%{data: data}) == "unlisted" +    end +      test "it delists an old post" do        Config.put([:mrf_object_age, :actions], [:delist]) @@ -80,6 +106,22 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do    end    describe "with strip_followers action" do +    test "works with objects with empty to or cc fields" do +      Config.put([:mrf_object_age, :actions], [:strip_followers]) + +      data = +        get_old_message() +        |> Map.put("cc", nil) +        |> Map.put("to", nil) + +      {:ok, user} = User.get_or_fetch_by_ap_id(data["actor"]) + +      {:ok, data} = ObjectAgePolicy.filter(data) + +      refute user.follower_address in data["to"] +      refute user.follower_address in data["cc"] +    end +      test "it strips followers collections from an old post" do        Config.put([:mrf_object_age, :actions], [:strip_followers])  | 
