mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-06-10 17:29:32 +00:00
MRF.ForceFollowersOnlyReplyDirectPolicy
Force replies to followers-only posts to always be direct
This commit is contained in:
parent
df7a8d4efe
commit
4ef6b3c9bf
|
@ -0,0 +1,54 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.ActivityPub.MRF.ForceFollowersOnlyReplyDirectPolicy do
|
||||||
|
@moduledoc "Forces direct scope on replies to followers-only activites"
|
||||||
|
|
||||||
|
alias Pleroma.User
|
||||||
|
|
||||||
|
@behaviour Pleroma.Web.ActivityPub.MRF.Policy
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def filter(%{"type" => type, "object" => %{"inReplyTo" => parent_post_ap_id}} = activity)
|
||||||
|
when type in ["Create", "Update"] do
|
||||||
|
reply_user = User.get_cached_by_ap_id(activity["actor"])
|
||||||
|
|
||||||
|
if followers_only?(parent_post_ap_id) do
|
||||||
|
direct_to = activity["to"] -- [reply_user.follower_address]
|
||||||
|
|
||||||
|
activity =
|
||||||
|
activity
|
||||||
|
|> Map.put("cc", [])
|
||||||
|
|> Map.put("to", direct_to)
|
||||||
|
|> Map.put("directMessage", true)
|
||||||
|
|> put_in(["object", "cc"], [])
|
||||||
|
|> put_in(["object", "to"], direct_to)
|
||||||
|
|
||||||
|
{:ok, activity}
|
||||||
|
else
|
||||||
|
{:ok, activity}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def filter(activity), do: {:ok, activity}
|
||||||
|
|
||||||
|
@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
|
Loading…
Reference in a new issue