-
- Pleroma.Web.Salmon.remote_users(actor, activity) ++ followers
- end
-
- defp get_cc_ap_ids(ap_id, recipients) do
- host = Map.get(URI.parse(ap_id), :host)
-
- recipients
- |> Enum.filter(fn %User{ap_id: ap_id} -> Map.get(URI.parse(ap_id), :host) == host end)
- |> Enum.map(& &1.ap_id)
- end
-
- def publish(actor, %{data: %{"bcc" => bcc}} = activity) when is_list(bcc) and bcc != [] do
- public = is_public?(activity)
- {:ok, data} = Transmogrifier.prepare_outgoing(activity.data)
-
- recipients = recipients(actor, activity)
-
- recipients
- |> Enum.filter(&User.ap_enabled?/1)
- |> Enum.map(fn %{info: %{source_data: data}} -> data["inbox"] end)
- |> Enum.filter(fn inbox -> should_federate?(inbox, public) end)
- |> Instances.filter_reachable()
- |> Enum.each(fn {inbox, unreachable_since} ->
- %User{ap_id: ap_id} =
- Enum.find(recipients, fn %{info: %{source_data: data}} -> data["inbox"] == inbox end)
-
- cc = get_cc_ap_ids(ap_id, recipients)
-
- json =
- data
- |> Map.put("cc", cc)
- |> Map.put("directMessage", true)
- |> Jason.encode!()
-
- Federator.publish_single_ap(%{
- inbox: inbox,
- json: json,
- actor: actor,
- id: activity.data["id"],
- unreachable_since: unreachable_since
- })
- end)
- end
-
- def publish(actor, activity) do
- public = is_public?(activity)
- {:ok, data} = Transmogrifier.prepare_outgoing(activity.data)
-
- json = Jason.encode!(data)
-
- recipients(actor, activity)
- |> Enum.filter(&User.ap_enabled?/1)
- |> Enum.map(fn %{info: %{source_data: data}} ->
- (is_map(data["endpoints"]) && Map.get(data["endpoints"], "sharedInbox")) || data["inbox"]
- end)
- |> Enum.uniq()
- |> Enum.filter(fn inbox -> should_federate?(inbox, public) end)
- |> Instances.filter_reachable()
- |> Enum.each(fn {inbox, unreachable_since} ->
- Federator.publish_single_ap(%{
- inbox: inbox,
- json: json,
- actor: actor,
- id: activity.data["id"],
- unreachable_since: unreachable_since
- })
- end)