diff options
author | lain <lain@soykaf.club> | 2018-02-17 18:38:58 +0100 |
---|---|---|
committer | lain <lain@soykaf.club> | 2018-02-17 18:38:58 +0100 |
commit | ab27c90c9fccd20cacad86a5c5f9a48314884d53 (patch) | |
tree | 560d06ac016654be328c05c0a879814451846edf /lib | |
parent | fb7b926be385da563f29f2a7134f965fcba36b3c (diff) | |
download | pleroma-ab27c90c9fccd20cacad86a5c5f9a48314884d53.tar.gz pleroma-ab27c90c9fccd20cacad86a5c5f9a48314884d53.zip |
ActivityPub: Handle attachments.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 76f04e8a3..6cf7cfe35 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -11,6 +11,18 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do def fix_object(object) do object |> Map.put("actor", object["attributedTo"]) + |> fix_attachments + end + + def fix_attachments(object) do + attachments = object["attachment"] || [] + |> Enum.map(fn (data) -> + url = [%{"type" => "Link", "mediaType" => data["mediaType"], "url" => data["url"]}] + Map.put(data, "url", url) + end) + + object + |> Map.put("attachment", attachments) end # TODO: validate those with a Ecto scheme @@ -60,6 +72,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do object = object |> add_mention_tags |> add_attributed_to + |> prepare_attachments data = data |> Map.put("object", object) @@ -93,4 +106,15 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do object |> Map.put("attributedTo", attributedTo) end + + def prepare_attachments(object) do + attachments = (object["attachment"] || []) + |> Enum.map(fn (data) -> + [%{"mediaType" => media_type, "href" => href} | _] = data["url"] + %{"url" => href, "mediaType" => media_type, "name" => data["name"], "type" => "Document"} + end) + + object + |> Map.put("attachment", attachments) + end end |