Ignore duplicate create activities.
This commit is contained in:
parent
ffa2f57c36
commit
297a2c7d3f
3 changed files with 16 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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!
|
||||
|
||||
|
|
Loading…
Reference in a new issue