diff options
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 | 
