From 6058da0d4436defa7fc04748e9790707d78c614c Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 3 Nov 2022 18:11:40 +0100 Subject: [PATCH] Propertly handle other errors when receiving a comment Signed-off-by: Thomas Citharel --- lib/federation/activity_pub/transmogrifier.ex | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/lib/federation/activity_pub/transmogrifier.ex b/lib/federation/activity_pub/transmogrifier.ex index 09ca8ef11..9efa6ccce 100644 --- a/lib/federation/activity_pub/transmogrifier.ex +++ b/lib/federation/activity_pub/transmogrifier.ex @@ -77,20 +77,9 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do object_data when is_map(object_data) -> case Discussions.get_comment_from_url_with_preload(object_data.url) do {:error, :comment_not_found} -> - object_data = transform_object_data_for_discussion(object_data) - - case create_comment_or_discussion(object_data) do - {:ok, %Activity{} = activity, entity} -> - {:ok, activity, entity} - - {:error, :entity_tombstoned} -> - Logger.debug("Tried to reply to an event that has been tombstoned") - :error - - {:error, :event_not_allow_commenting} -> - Logger.debug("Tried to reply to an event for which comments are closed") - :error - end + object_data + |> transform_object_data_for_discussion() + |> save_comment_or_discussion() {:ok, %Comment{} = comment} -> # Object already exists @@ -1230,4 +1219,28 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do object_id = Utils.get_url(object) Utils.get_actor(data) == object_id and not Utils.are_same_origin?(object_id, Endpoint.url()) end + + @spec save_comment_or_discussion(map()) :: {:ok, Activity.t(), struct()} | :error + defp save_comment_or_discussion(object_data) do + case create_comment_or_discussion(object_data) do + {:ok, %Activity{} = activity, entity} -> + {:ok, activity, entity} + + {:error, :entity_tombstoned} -> + Logger.debug("Tried to reply to an event that has been tombstoned") + :error + + {:error, :event_not_allow_commenting} -> + Logger.debug("Tried to reply to an event for which comments are closed") + :error + + {:error, %Ecto.Changeset{} = _changeset} -> + Logger.debug("Error when saving external comment") + :error + + {:error, err} -> + Logger.debug("Generic error when saving external comment", err: inspect(err)) + :error + end + end end