From 803bdc1a6759fe9f46a9dcdb0ffa18d294198c9d Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 18 Feb 2018 16:05:25 +0100 Subject: [PATCH] Federate non-public over ActivityPub only, do some better signing. --- lib/pleroma/web/activity_pub/activity_pub.ex | 6 +++--- lib/pleroma/web/federator/federator.ex | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index a0b51da89..1a795bad1 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -288,12 +288,12 @@ def publish(actor, activity) do |> Enum.uniq {:ok, data} = Transmogrifier.prepare_outgoing(activity.data) - + json = Poison.encode!(data) 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}]) + signature = Pleroma.Web.HTTPSignatures.sign(actor, %{host: host, "content-length": byte_size(json)}) + @httpoison.post(inbox, json, [{"Content-Type", "application/activity+json"}, {"signature", signature}]) end end diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex index 68e5544e7..042c202be 100644 --- a/lib/pleroma/web/federator/federator.ex +++ b/lib/pleroma/web/federator/federator.ex @@ -2,6 +2,7 @@ defmodule Pleroma.Web.Federator do use GenServer alias Pleroma.User alias Pleroma.Web.{WebFinger, Websub} + alias Pleroma.Web.ActivityPub.ActivityPub require Logger @websub Application.get_env(:pleroma, :websub) @@ -42,11 +43,13 @@ def handle(:publish, activity) do Logger.debug(fn -> "Running publish for #{activity.data["id"]}" end) with actor when not is_nil(actor) <- User.get_cached_by_ap_id(activity.data["actor"]) do {:ok, actor} = WebFinger.ensure_keys_present(actor) - Logger.debug(fn -> "Sending #{activity.data["id"]} out via salmon" end) - Pleroma.Web.Salmon.publish(actor, activity) + if ActivityPub.is_public?(activity) do + Logger.debug(fn -> "Sending #{activity.data["id"]} out via salmon" end) + Pleroma.Web.Salmon.publish(actor, activity) - Logger.debug(fn -> "Sending #{activity.data["id"]} out via websub" end) - Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity) + Logger.debug(fn -> "Sending #{activity.data["id"]} out via websub" end) + Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity) + end Logger.debug(fn -> "Sending #{activity.data["id"]} out via AP" end) Pleroma.Web.ActivityPub.ActivityPub.publish(actor, activity)