diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 14 | 
1 files changed, 14 insertions, 0 deletions
| diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 4e0be5ba2..75a71da98 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -562,6 +562,17 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do      end    end +  @quarantined_instances Keyword.get(@instance, :quarantined_instances, []) + +  def should_federate?(inbox, public) do +    if public do +      true +    else +      inbox_info = URI.parse(inbox) +      inbox_info.host not in @quarantined_instances +    end +  end +    def publish(actor, activity) do      followers =        if actor.follower_address in activity.recipients do @@ -571,6 +582,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do          []        end +    public = is_public?(activity) +      remote_inboxes =        (Pleroma.Web.Salmon.remote_users(activity) ++ followers)        |> Enum.filter(fn user -> User.ap_enabled?(user) end) @@ -578,6 +591,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do          (data["endpoints"] && data["endpoints"]["sharedInbox"]) || data["inbox"]        end)        |> Enum.uniq() +      |> Enum.filter(fn inbox -> should_federate?(inbox, public) end)      {:ok, data} = Transmogrifier.prepare_outgoing(activity.data)      json = Jason.encode!(data) | 
