Browse Source

Handle duplicates.

tags/v0.9.9
Roger Braun 7 years ago
parent
commit
18edc299b2
2 changed files with 15 additions and 6 deletions
  1. +9
    -6
      lib/pleroma/web/ostatus/ostatus.ex
  2. +6
    -0
      test/web/ostatus/ostatus_test.exs

+ 9
- 6
lib/pleroma/web/ostatus/ostatus.ex View File

@@ -3,7 +3,7 @@ defmodule Pleroma.Web.OStatus do
import Pleroma.Web.XML
require Logger

alias Pleroma.{Repo, User, Web}
alias Pleroma.{Repo, User, Web, Object}
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.{WebFinger, Websub}

@@ -28,11 +28,9 @@ defmodule Pleroma.Web.OStatus do

case object_type do
'http://activitystrea.ms/schema/1.0/note' ->
{:ok, activity} = handle_note(entry, doc)
activity
with {:ok, activity} <- handle_note(entry, doc), do: activity
'http://activitystrea.ms/schema/1.0/comment' ->
{:ok, activity} = handle_note(entry, doc)
activity
with {:ok, activity} <- handle_note(entry, doc), do: activity
_ ->
Logger.error("Couldn't parse incoming document")
nil
@@ -86,7 +84,12 @@ defmodule Pleroma.Web.OStatus do
object
end

ActivityPub.create(to, actor, context, object, %{}, date)
# TODO: Bail out sooner and use transaction.
if Object.get_by_ap_id(id) do
{:error, "duplicate activity"}
else
ActivityPub.create(to, actor, context, object, %{}, date)
end
end

def find_or_make_user(uri) do


+ 6
- 0
test/web/ostatus/ostatus_test.exs View File

@@ -2,6 +2,12 @@ defmodule Pleroma.Web.OStatusTest do
use Pleroma.DataCase
alias Pleroma.Web.OStatus

test "don't insert create notes twice" do
incoming = File.read!("test/fixtures/incoming_note_activity.xml")
{:ok, [_activity]} = OStatus.handle_incoming(incoming)
assert {:ok, [{:error, "duplicate activity"}]} == OStatus.handle_incoming(incoming)
end

test "handle incoming note - GS, Salmon" do
incoming = File.read!("test/fixtures/incoming_note_activity.xml")
{:ok, [activity]} = OStatus.handle_incoming(incoming)


Loading…
Cancel
Save