aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub_controller.ex2
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex4
-rw-r--r--test/web/activity_pub/transmogrifier_test.exs12
3 files changed, 16 insertions, 2 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex
index 1a6d7ec7a..835e8bd9d 100644
--- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex
@@ -25,7 +25,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
# TODO: Ensure that this inbox is a recipient of the message
def inbox(%{assigns: %{valid_signature: true}} = conn, params) do
# File.write("/tmp/incoming.json", Poison.encode!(params))
- Logger.info(Poison.encode!(params, [pretty: 2]))
+ # Logger.info(Poison.encode!(params, [pretty: 2]))
with {:ok, _user} <- ap_enabled_actor(params["actor"]),
nil <- Activity.get_by_ap_id(params["id"]),
{:ok, activity} <- Transmogrifier.handle_incoming(params) do
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index 075250aa5..e53957fbf 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -37,7 +37,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
# - tags
# - emoji
def handle_incoming(%{"type" => "Create", "object" => %{"type" => "Note"} = object} = data) do
- with %User{} = user <- User.get_or_fetch_by_ap_id(data["actor"]) do
+ with nil <- Activity.get_create_activity_by_object_ap_id(object["id"]),
+ %User{} = user <- User.get_or_fetch_by_ap_id(data["actor"]) do
object = fix_object(data["object"])
params = %{
to: data["to"],
@@ -54,6 +55,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
ActivityPub.create(params)
else
+ %Activity{} = activity -> {:ok, activity}
_e -> :error
end
end
diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs
index 45e284157..11c6bbe1c 100644
--- a/test/web/activity_pub/transmogrifier_test.exs
+++ b/test/web/activity_pub/transmogrifier_test.exs
@@ -10,6 +10,18 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
alias Pleroma.Web.CommonAPI
describe "handle_incoming" do
+ test "it ignores an incoming notice if we already have it" do
+ activity = insert(:note_activity)
+
+ data = File.read!("test/fixtures/mastodon-post-activity.json")
+ |> Poison.decode!
+ |> Map.put("object", activity.data["object"])
+
+ {:ok, returned_activity} = Transmogrifier.handle_incoming(data)
+
+ assert activity == returned_activity
+ end
+
test "it works for incoming notices" do
data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!