aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorkaniini <nenolod@gmail.com>2018-08-16 15:20:15 +0000
committerkaniini <nenolod@gmail.com>2018-08-16 15:20:15 +0000
commit5fbb14f5ecbbd9feeed2a303c2619fbbba07d70e (patch)
treea2045791b4c0027b0c41c6a14ab504fcb3099956 /lib
parent38361e7b5e24cbbd4654bd76fce4b3c66562ab59 (diff)
parent805844367475af3929b059d46f88cc31132fac1b (diff)
downloadpleroma-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.ex27
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