diff options
author | rinpatch <rinpatch@sdf.org> | 2019-12-11 09:57:00 +0000 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2019-12-11 09:57:00 +0000 |
commit | 72f3b2213425b37ea6b493beb543cc1748e4ae79 (patch) | |
tree | 1b9071d740c072d5fbbc4e2848afa029ec1efe58 /lib | |
parent | 1f498ba2bb77a6dd103631d9de1e5c1bbfaaea10 (diff) | |
parent | 1ad96d667ae2f8a14a0b7c701a99c7fa72985a00 (diff) | |
download | pleroma-72f3b2213425b37ea6b493beb543cc1748e4ae79.tar.gz |
Merge branch 'domain-block-precedence' into 'develop'
make follows take precedence over domain blocks
See merge request pleroma/pleroma!2019
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user.ex | 10 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 20 |
2 files changed, 27 insertions, 3 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 6b556e8e1..706aee2ff 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -862,6 +862,13 @@ defmodule Pleroma.User do |> Repo.all() end + def get_friends_ap_ids(user) do + user + |> get_friends_query(nil) + |> select([u], u.ap_id) + |> Repo.all() + end + def get_friends_ids(user, page \\ nil) do user |> get_friends_query(page) @@ -1136,7 +1143,8 @@ defmodule Pleroma.User do def blocks?(nil, _), do: false def blocks?(%User{} = user, %User{} = target) do - blocks_user?(user, target) || blocks_domain?(user, target) + blocks_user?(user, target) || + (!User.following?(user, target) && blocks_domain?(user, target)) end def blocks_user?(%User{} = user, %User{} = target) do diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 6571102a9..2bb3ad635 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -950,6 +950,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do blocked_ap_ids = opts["blocked_users_ap_ids"] || User.blocked_users_ap_ids(user) domain_blocks = user.domain_blocks || [] + following_ap_ids = User.get_friends_ap_ids(user) + query = if has_named_binding?(query, :object), do: query, else: Activity.with_joined_object(query) @@ -964,8 +966,22 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do activity.data, ^blocked_ap_ids ), - where: fragment("not (split_part(?, '/', 3) = ANY(?))", activity.actor, ^domain_blocks), - where: fragment("not (split_part(?->>'actor', '/', 3) = ANY(?))", o.data, ^domain_blocks) + where: + fragment( + "(not (split_part(?, '/', 3) = ANY(?))) or ? = ANY(?)", + activity.actor, + ^domain_blocks, + activity.actor, + ^following_ap_ids + ), + where: + fragment( + "(not (split_part(?->>'actor', '/', 3) = ANY(?))) or (?->>'actor') = ANY(?)", + o.data, + ^domain_blocks, + o.data, + ^following_ap_ids + ) ) end |