From 6f9db37ca3946cdfe792f9a913e333b30b34a68d Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Tue, 10 Aug 2021 20:32:50 +0200 Subject: [PATCH] Fix checking origin from a tombstone When comparing an activity with their origin, only compare the ID directly, as Tombstones don't have actors anymore Signed-off-by: Thomas Citharel --- lib/federation/activity_pub/fetcher.ex | 2 +- lib/federation/activity_pub/utils.ex | 2 ++ test/federation/activity_pub/utils_test.exs | 10 ++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) 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