From 1245141779e8a1e7237af65c152dc15cbc735f0f Mon Sep 17 00:00:00 2001
From: floatingghost <hannah@coffee-and-dreams.uk>
Date: Mon, 8 Aug 2022 15:47:57 +0000
Subject: [PATCH] treat rejections in MRF as a reject in federator (#155)

Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/155
---
 lib/pleroma/workers/receiver_worker.ex        |  8 +++++-
 test/pleroma/web/federator_test.exs           |  4 +--
 test/pleroma/workers/receiver_worker_test.exs | 25 +++++++++++++++++++
 3 files changed, 34 insertions(+), 3 deletions(-)
 create mode 100644 test/pleroma/workers/receiver_worker_test.exs

diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex
index 69125dcd0..b8905deb5 100644
--- a/lib/pleroma/workers/receiver_worker.ex
+++ b/lib/pleroma/workers/receiver_worker.ex
@@ -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
diff --git a/test/pleroma/web/federator_test.exs b/test/pleroma/web/federator_test.exs
index 372b6a73a..3ae266ecd 100644
--- a/test/pleroma/web/federator_test.exs
+++ b/test/pleroma/web/federator_test.exs
@@ -153,7 +153,7 @@ test "rejects incoming AP docs with incorrect origin" 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 @@ test "it does not crash if MRF rejects the post" 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
index 000000000..283beee4d
--- /dev/null
+++ b/test/pleroma/workers/receiver_worker_test.exs
@@ -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