diff --git a/lib/federation/activity_pub/fetcher.ex b/lib/federation/activity_pub/fetcher.ex index 7bac0fee3..71a7cfc1c 100644 --- a/lib/federation/activity_pub/fetcher.ex +++ b/lib/federation/activity_pub/fetcher.ex @@ -142,7 +142,7 @@ defmodule Mobilizon.Federation.ActivityPub.Fetcher do true else Sentry.capture_message("Object origin check failed", extra: %{url: url, data: data}) - Logger.debug("Object origin check failed") + Logger.debug("Object origin check failed between #{inspect(url)} and #{inspect(data)}") false end end diff --git a/lib/federation/activity_pub/utils.ex b/lib/federation/activity_pub/utils.ex index 7a7af94a1..86252e255 100644 --- a/lib/federation/activity_pub/utils.ex +++ b/lib/federation/activity_pub/utils.ex @@ -239,6 +239,8 @@ defmodule Mobilizon.Federation.ActivityPub.Utils do Takes the actor or attributedTo attributes (considers only the first elem if they're an array) """ + def origin_check?(id, %{"type" => "Tombstone", "id" => tombstone_id}), do: id == tombstone_id + def origin_check?(id, %{"actor" => actor, "attributedTo" => _attributed_to} = params) when not is_nil(actor) and actor != "" do params = Map.delete(params, "attributedTo") diff --git a/test/federation/activity_pub/utils_test.exs b/test/federation/activity_pub/utils_test.exs index d62f00d5e..4aff20089 100644 --- a/test/federation/activity_pub/utils_test.exs +++ b/test/federation/activity_pub/utils_test.exs @@ -5,6 +5,7 @@ defmodule Mobilizon.Federation.ActivityPub.UtilsTest do import Mobilizon.Factory + alias Mobilizon.Federation.ActivityPub.Utils alias Mobilizon.Federation.ActivityStream.Converter alias Mobilizon.Web.Endpoint @@ -51,4 +52,13 @@ defmodule Mobilizon.Federation.ActivityPub.UtilsTest do assert comment_data["inReplyTo"] == comment.url end end + + describe "origin_check?" do + test "origin_check? with a tombstone" do + assert Utils.origin_check?("http://an_uri", %{ + "type" => "Tombstone", + "id" => "http://an_uri" + }) + end + end end