summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMark Felder <feld@feld.me>2024-08-12 20:17:35 -0400
committerMark Felder <feld@feld.me>2024-08-12 20:18:02 -0400
commitb0c64945c2cfd622b9f2c68d594bda4fd4c1b9eb (patch)
tree5934742a275335d3318520cde24006b94bce5bc5 /lib
parent8c978727c210da8558b15ee515b3b8824ff3a912 (diff)
downloadpleroma-b0c64945c2cfd622b9f2c68d594bda4fd4c1b9eb.tar.gz
pleroma-b0c64945c2cfd622b9f2c68d594bda4fd4c1b9eb.zip
MRF.FODirectReply: use Visibility module to verify the scope
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/activity_pub/mrf/fo_direct_reply.ex20
1 files changed, 4 insertions, 16 deletions
diff --git a/lib/pleroma/web/activity_pub/mrf/fo_direct_reply.ex b/lib/pleroma/web/activity_pub/mrf/fo_direct_reply.ex
index 4eb97afa8..2cf22745a 100644
--- a/lib/pleroma/web/activity_pub/mrf/fo_direct_reply.ex
+++ b/lib/pleroma/web/activity_pub/mrf/fo_direct_reply.ex
@@ -7,7 +7,9 @@ defmodule Pleroma.Web.ActivityPub.MRF.FODirectReply do
FODirectReply alters the scope of replies to activities which are Followers Only to be Direct. The purpose of this policy is to prevent broken threads for followers of the reply author because their response was to a user that they are not also following.
"""
+ alias Pleroma.Object
alias Pleroma.User
+ alias Pleroma.Web.ActivityPub.Visibility
@behaviour Pleroma.Web.ActivityPub.MRF.Policy
@@ -25,7 +27,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.FODirectReply do
) do
with true <- is_binary(in_reply_to),
%User{follower_address: followers_collection, local: true} <- User.get_by_ap_id(actor),
- true <- followers_only?(in_reply_to) do
+ %Object{} = in_reply_to_object <- Object.get_by_ap_id(in_reply_to),
+ "private" <- Visibility.get_visibility(in_reply_to_object) do
direct_to = to -- [followers_collection]
updated_activity =
@@ -47,19 +50,4 @@ defmodule Pleroma.Web.ActivityPub.MRF.FODirectReply do
@impl true
def describe, do: {:ok, %{}}
-
- defp followers_only?(parent_ap_id) do
- with %Pleroma.Object{} = object <- Pleroma.Object.get_by_ap_id(parent_ap_id),
- object_data <- Map.get(object, :data),
- %Pleroma.User{} = user <- User.get_cached_by_ap_id(object_data["actor"]) do
- if user.follower_address in object_data["to"] do
- true
- else
- false
- end
- else
- _ ->
- false
- end
- end
end