From f446e75577d456e365eedb4e047a586d86e97b7a Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Tue, 14 Aug 2018 17:05:11 +0000 Subject: [PATCH] activitypub: transmogrifier: add necessary translations for kroeg --- .../web/activity_pub/transmogrifier.ex | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 2ebc526df..e5fb6e033 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -21,6 +21,10 @@ def get_actor(%{"actor" => actor}) when is_list(actor) do Enum.at(actor, 0) end + def get_actor(%{"actor" => actor}) when is_map(actor) do + actor["id"] + end + def get_actor(%{"actor" => actor_list}) do Enum.find(actor_list, fn %{"type" => type} -> type == "Person" end) |> Map.get("id") @@ -38,6 +42,24 @@ def fix_object(object) do |> fix_emoji |> fix_tag |> fix_content_map + |> fix_addressing + end + + def fix_addressing_list(map, field) do + if is_binary(map[field]) do + map + |> Map.put(field, [map[field]]) + else + map + end + end + + def fix_addressing(map) do + map + |> fix_addressing_list("to") + |> fix_addressing_list("cc") + |> fix_addressing_list("bto") + |> fix_addressing_list("bcc") end def fix_actor(%{"attributedTo" => actor} = object) do @@ -143,7 +165,10 @@ def fix_content_map(object), do: object def handle_incoming(%{"type" => "Create", "object" => %{"type" => objtype} = object} = data) when objtype in ["Article", "Note"] do actor = get_actor(data) - data = Map.put(data, "actor", actor) + + data = + Map.put(data, "actor", actor) + |> fix_addressing with nil <- Activity.get_create_activity_by_object_ap_id(object["id"]), %User{} = user <- User.get_or_fetch_by_ap_id(data["actor"]) do