Merge branch 'feature/quarantine' into 'develop'

add the ability to 'quarantine' an activitypub peer, causing them to be treated as an OStatus peer.

See merge request pleroma/pleroma!199
This commit is contained in:
lambda 2018-06-07 14:44:08 +00:00
commit 595ca3bb3a
2 changed files with 16 additions and 1 deletions

View file

@ -54,7 +54,8 @@ config :pleroma, :instance,
registrations_open: true, registrations_open: true,
federating: true, federating: true,
rewrite_policy: Pleroma.Web.ActivityPub.MRF.NoOpPolicy, rewrite_policy: Pleroma.Web.ActivityPub.MRF.NoOpPolicy,
public: true public: true,
quarantined_instances: []
config :pleroma, :activitypub, accept_blocks: true config :pleroma, :activitypub, accept_blocks: true

View file

@ -562,6 +562,17 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end end
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 def publish(actor, activity) do
followers = followers =
if actor.follower_address in activity.recipients do if actor.follower_address in activity.recipients do
@ -571,6 +582,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
[] []
end end
public = is_public?(activity)
remote_inboxes = remote_inboxes =
(Pleroma.Web.Salmon.remote_users(activity) ++ followers) (Pleroma.Web.Salmon.remote_users(activity) ++ followers)
|> Enum.filter(fn user -> User.ap_enabled?(user) end) |> 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"] (data["endpoints"] && data["endpoints"]["sharedInbox"]) || data["inbox"]
end) end)
|> Enum.uniq() |> Enum.uniq()
|> Enum.filter(fn inbox -> should_federate?(inbox, public) end)
{:ok, data} = Transmogrifier.prepare_outgoing(activity.data) {:ok, data} = Transmogrifier.prepare_outgoing(activity.data)
json = Jason.encode!(data) json = Jason.encode!(data)