aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlambda <pleromagit@rogerbraun.net>2018-06-07 14:44:08 +0000
committerlambda <pleromagit@rogerbraun.net>2018-06-07 14:44:08 +0000
commit595ca3bb3a80eb3908a96b13c8b446296219a9c7 (patch)
tree0895db9662441f0e169586de33fd2e291a867a1e /lib
parentb114808a10548a2b77bebbecae13ba94e8c2a3a6 (diff)
parent09604182d0ea4c8bdc2f9aa0337dd45183fe6a92 (diff)
downloadpleroma-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.ex14
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)