Commit c2d0cb1a authored by lain's avatar lain
Browse files

ActivtyPub Delivery: Use shared inbox if possible.

parent 7b26443a
......@@ -256,18 +256,20 @@ def make_user_from_ap_id(ap_id) do
def publish(actor, activity) do
{:ok, followers} = User.get_followers(actor)
remote_users = Pleroma.Web.Salmon.remote_users(activity) ++ followers
remote_inboxes = Pleroma.Web.Salmon.remote_users(activity) ++ followers
|> Enum.filter(fn (user) -> User.ap_enabled?(user) end)
|> Enum.map(fn (%{info: %{"source_data" => data}}) ->
(data["endpoints"] && data["endpoints"]["sharedInbox"]) ||data["inbox"]
end)
|> Enum.uniq
{:ok, data} = Transmogrifier.prepare_outgoing(activity.data)
Enum.each remote_users, fn(user) ->
if user.info["ap_enabled"] do
inbox = user.info["source_data"]["inbox"]
Logger.info("Federating #{activity.data["id"]} to #{inbox}")
host = URI.parse(inbox).host
signature = Pleroma.Web.HTTPSignatures.sign(actor, %{host: host})
@httpoison.post(inbox, Poison.encode!(data), [{"Content-Type", "application/activity+json"}, {"signature", signature}])
end
Enum.each remote_inboxes, fn(inbox) ->
Logger.info("Federating #{activity.data["id"]} to #{inbox}")
host = URI.parse(inbox).host
signature = Pleroma.Web.HTTPSignatures.sign(actor, %{host: host})
@httpoison.post(inbox, Poison.encode!(data), [{"Content-Type", "application/activity+json"}, {"signature", signature}])
end
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment