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}
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
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
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)