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
{:ok, activities}
end
- # TODO
- # wire up replies
def handle_note(entry, doc \\ nil) do
content_html = string_from_xpath("/entry/content[1]", entry)
uri = string_from_xpath("/entry/author/uri[1]", entry) || string_from_xpath("/feed/author/uri[1]", doc)
{:ok, actor} = find_or_make_user(uri)
- context = string_from_xpath("/entry/ostatus:conversation[1]", entry) |> String.trim
+ context = (string_from_xpath("/entry/ostatus:conversation[1]", entry) || "") |> String.trim
context = if String.length(context) > 0 do
context
else
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, false)
+ end
end
def find_or_make_user(uri) do
name: info.name,
nickname: info.nickname <> "@" <> info.host,
ap_id: info.uri,
- info: info
+ info: info,
+ avatar: info.avatar
}
# TODO: Make remote user changeset
# SHould enforce fqn nickname
end
# TODO: Just takes the first one for now.
- defp make_avatar_object(author_doc) do
- href = string_from_xpath("/author[1]/link[@rel=\"avatar\"]/@href", author_doc)
- type = string_from_xpath("/author[1]/link[@rel=\"avatar\"]/@type", author_doc)
+ def make_avatar_object(author_doc) do
+ href = string_from_xpath("/feed/author[1]/link[@rel=\"avatar\"]/@href", author_doc)
+ type = string_from_xpath("/feed/author[1]/link[@rel=\"avatar\"]/@type", author_doc)
if href do
%{