diff options
author | William Pitcock <nenolod@dereferenced.org> | 2019-03-19 17:27:42 +0000 |
---|---|---|
committer | William Pitcock <nenolod@dereferenced.org> | 2019-03-19 17:27:42 +0000 |
commit | 798da28812b7af2e79e2c59896418192efcab543 (patch) | |
tree | e167ab4d4013b434372dd213351fa4b51eea0da4 | |
parent | 43bd7f47db7f2a31c59ec3f48cf22a51847ae241 (diff) | |
download | pleroma-798da28812b7af2e79e2c59896418192efcab543.tar.gz |
activitypub: transmogrifier: ensure as:Public activities are delivered to followers
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 8e4bf7b47..7f3d8fd4b 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -128,13 +128,42 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do |> fix_explicit_addressing(explicit_mentions) end + # if as:Public is addressed, then make sure the followers collection is also addressed + # so that the activities will be delivered to local users. + def fix_implicit_addressing(%{"to" => to, "cc" => cc} = object, followers_collection) do + recipients = to ++ cc + + if followers_collection not in recipients do + cond do + "https://www.w3.org/ns/activitystreams#Public" in cc -> + to = to ++ [followers_collection] + Map.put(object, "to", to) + + "https://www.w3.org/ns/activitystreams#Public" in to -> + cc = cc ++ [followers_collection] + Map.put(object, "cc", cc) + + true -> + object + end + else + object + end + end + + def fix_implicit_addressing(object, _), do: object + def fix_addressing(object) do + %User{} = user = User.get_cached_by_ap_id(object["actor"]) + followers_collection = User.ap_followers(user) + object |> fix_addressing_list("to") |> fix_addressing_list("cc") |> fix_addressing_list("bto") |> fix_addressing_list("bcc") |> fix_explicit_addressing + |> fix_implicit_addressing(followers_collection) end def fix_actor(%{"attributedTo" => actor} = object) do |