diff options
author | lambda <pleromagit@rogerbraun.net> | 2018-06-07 14:44:08 +0000 |
---|---|---|
committer | lambda <pleromagit@rogerbraun.net> | 2018-06-07 14:44:08 +0000 |
commit | 595ca3bb3a80eb3908a96b13c8b446296219a9c7 (patch) | |
tree | 0895db9662441f0e169586de33fd2e291a867a1e /lib | |
parent | b114808a10548a2b77bebbecae13ba94e8c2a3a6 (diff) | |
parent | 09604182d0ea4c8bdc2f9aa0337dd45183fe6a92 (diff) | |
download | pleroma-595ca3bb3a80eb3908a96b13c8b446296219a9c7.tar.gz |
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
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) |