diff options
author | William Pitcock <nenolod@dereferenced.org> | 2018-06-07 03:26:41 +0000 |
---|---|---|
committer | William Pitcock <nenolod@dereferenced.org> | 2018-06-07 14:38:09 +0000 |
commit | 09604182d0ea4c8bdc2f9aa0337dd45183fe6a92 (patch) | |
tree | 5e53b229253ff39ba67f9677d05e98fcad8c7b87 | |
parent | 0a0c6bf3945d6da98d3e5a08205a9b4f24adb67f (diff) | |
download | pleroma-09604182d0ea4c8bdc2f9aa0337dd45183fe6a92.tar.gz |
add the ability to 'quarantine' an activitypub peer, causing them to be treated as an OStatus peer.
-rw-r--r-- | config/config.exs | 3 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 14 |
2 files changed, 16 insertions, 1 deletions
diff --git a/config/config.exs b/config/config.exs index 826dd07b7..3292bf29c 100644 --- a/config/config.exs +++ b/config/config.exs @@ -54,7 +54,8 @@ config :pleroma, :instance, registrations_open: true, federating: true, rewrite_policy: Pleroma.Web.ActivityPub.MRF.NoOpPolicy, - public: true + public: true, + quarantined_instances: [] config :pleroma, :activitypub, accept_blocks: true 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) |