Restrict ActivityExpirationPolicy to Notes only
authorEgor Kislitsyn <egor@kislitsyn.com>
Mon, 8 Jun 2020 13:56:34 +0000 (17:56 +0400)
committerEgor Kislitsyn <egor@kislitsyn.com>
Mon, 8 Jun 2020 13:56:34 +0000 (17:56 +0400)
lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex
test/web/activity_pub/mrf/activity_expiration_policy_test.exs

index a9bdf3b693cf37ff50528e60b6f9da0bed6e2b0c..8e47f1e02f18221a987536a8ac6b8a037d4b852d 100644 (file)
@@ -9,7 +9,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy do
   @impl true
   def filter(activity) do
     activity =
-      if activity["type"] == "Create" && local?(activity) do
+      if note?(activity) and local?(activity) do
         maybe_add_expiration(activity)
       else
         activity
@@ -25,6 +25,10 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy do
     String.starts_with?(id, Pleroma.Web.Endpoint.url())
   end
 
+  defp note?(activity) do
+    match?(%{"type" => "Create", "object" => %{"type" => "Note"}}, activity)
+  end
+
   defp maybe_add_expiration(activity) do
     days = Pleroma.Config.get([:mrf_activity_expiration, :days], 365)
     expires_at = NaiveDateTime.utc_now() |> Timex.shift(days: days)
index 0d3bcc45790c78cf929286f776212df85198c03b..8babf49e74aa7cb87f16ad227a973a251a734099 100644 (file)
@@ -10,7 +10,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do
 
   test "adds `expires_at` property" do
     assert {:ok, %{"type" => "Create", "expires_at" => expires_at}} =
-             ActivityExpirationPolicy.filter(%{"id" => @id, "type" => "Create"})
+             ActivityExpirationPolicy.filter(%{
+               "id" => @id,
+               "type" => "Create",
+               "object" => %{"type" => "Note"}
+             })
 
     assert Timex.diff(expires_at, NaiveDateTime.utc_now(), :days) == 364
   end
@@ -22,7 +26,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do
              ActivityExpirationPolicy.filter(%{
                "id" => @id,
                "type" => "Create",
-               "expires_at" => expires_at
+               "expires_at" => expires_at,
+               "object" => %{"type" => "Note"}
              })
   end
 
@@ -33,7 +38,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do
              ActivityExpirationPolicy.filter(%{
                "id" => @id,
                "type" => "Create",
-               "expires_at" => too_distant_future
+               "expires_at" => too_distant_future,
+               "object" => %{"type" => "Note"}
              })
 
     assert Timex.diff(expires_at, NaiveDateTime.utc_now(), :days) == 364
@@ -43,13 +49,14 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do
     assert {:ok, activity} =
              ActivityExpirationPolicy.filter(%{
                "id" => "https://example.com/123",
-               "type" => "Create"
+               "type" => "Create",
+               "object" => %{"type" => "Note"}
              })
 
     refute Map.has_key?(activity, "expires_at")
   end
 
-  test "ignores non-Create activities" do
+  test "ignores non-Create/Note activities" do
     assert {:ok, activity} =
              ActivityExpirationPolicy.filter(%{
                "id" => "https://example.com/123",
@@ -57,5 +64,14 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do
              })
 
     refute Map.has_key?(activity, "expires_at")
+
+    assert {:ok, activity} =
+             ActivityExpirationPolicy.filter(%{
+               "id" => "https://example.com/123",
+               "type" => "Create",
+               "object" => %{"type" => "Cofe"}
+             })
+
+    refute Map.has_key?(activity, "expires_at")
   end
 end