diff options
author | kaniini <nenolod@gmail.com> | 2018-08-16 15:20:15 +0000 |
---|---|---|
committer | kaniini <nenolod@gmail.com> | 2018-08-16 15:20:15 +0000 |
commit | 5fbb14f5ecbbd9feeed2a303c2619fbbba07d70e (patch) | |
tree | a2045791b4c0027b0c41c6a14ab504fcb3099956 /lib | |
parent | 38361e7b5e24cbbd4654bd76fce4b3c66562ab59 (diff) | |
parent | 805844367475af3929b059d46f88cc31132fac1b (diff) | |
download | pleroma-5fbb14f5ecbbd9feeed2a303c2619fbbba07d70e.tar.gz |
Merge branch 'bugfix/federation-kroeg' into 'develop'
fix federation with kroeg
See merge request pleroma/pleroma!272
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 27 |
1 files changed, 26 insertions, 1 deletions
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 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier 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 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier 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 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do 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 |