treat rejections in MRF as a reject in federator (#155)
authorfloatingghost <hannah@coffee-and-dreams.uk>
Mon, 8 Aug 2022 15:47:57 +0000 (15:47 +0000)
committerfloatingghost <hannah@coffee-and-dreams.uk>
Mon, 8 Aug 2022 15:47:57 +0000 (15:47 +0000)
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/155

lib/pleroma/workers/receiver_worker.ex
test/pleroma/web/federator_test.exs
test/pleroma/workers/receiver_worker_test.exs [new file with mode: 0644]

index 69125dcd07156da044e750fb96aa09e50e551d4f..b8905deb59fefe8425bb7fe0149fd8f768886db5 100644 (file)
@@ -9,6 +9,12 @@ defmodule Pleroma.Workers.ReceiverWorker do
 
   @impl Oban.Worker
   def perform(%Job{args: %{"op" => "incoming_ap_doc", "params" => params}}) do
-    Federator.perform(:incoming_ap_doc, params)
+    with {:ok, res} <- Federator.perform(:incoming_ap_doc, params) do
+      {:ok, res}
+    else
+      {:error, :origin_containment_failed} -> {:cancel, :origin_containment_failed}
+      {:error, {:reject, reason}} -> {:cancel, reason}
+      e -> e
+    end
   end
 end
index 372b6a73acd736d799c0a1262917ad1fdc04eb66..3ae266ecdf6b716e613c05cb287b26b9673c33bb 100644 (file)
@@ -153,7 +153,7 @@ defmodule Pleroma.Web.FederatorTest do
       }
 
       assert {:ok, job} = Federator.incoming_ap_doc(params)
-      assert {:error, :origin_containment_failed} = ObanHelpers.perform(job)
+      assert {:cancel, :origin_containment_failed} = ObanHelpers.perform(job)
     end
 
     test "it does not crash if MRF rejects the post" do
@@ -169,7 +169,7 @@ defmodule Pleroma.Web.FederatorTest do
         |> Jason.decode!()
 
       assert {:ok, job} = Federator.incoming_ap_doc(params)
-      assert {:error, _} = ObanHelpers.perform(job)
+      assert {:cancel, _} = ObanHelpers.perform(job)
     end
   end
 end
diff --git a/test/pleroma/workers/receiver_worker_test.exs b/test/pleroma/workers/receiver_worker_test.exs
new file mode 100644 (file)
index 0000000..283beee
--- /dev/null
@@ -0,0 +1,25 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Workers.ReceiverWorkerTest do
+  use Pleroma.DataCase, async: true
+  use Oban.Testing, repo: Pleroma.Repo
+
+  import Mock
+  import Pleroma.Factory
+
+  alias Pleroma.Workers.ReceiverWorker
+
+  test "it ignores MRF reject" do
+    params = insert(:note).data
+
+    with_mock Pleroma.Web.ActivityPub.Transmogrifier,
+      handle_incoming: fn _ -> {:reject, "MRF"} end do
+      assert {:cancel, "MRF"} =
+               ReceiverWorker.perform(%Oban.Job{
+                 args: %{"op" => "incoming_ap_doc", "params" => params}
+               })
+    end
+  end
+end