ForceMentionsInContent: don't apply it to top-level posts

This commit is contained in:
Alex Gleason 2022-01-26 21:24:26 -06:00
parent 2bab9dd175
commit 27cb3d6273
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
2 changed files with 32 additions and 2 deletions

View File

@ -72,8 +72,13 @@ defp clean_recipients(recipients, object) do
end end
@impl true @impl true
def filter(%{"type" => "Create", "object" => %{"type" => "Note", "to" => to}} = object) def filter(
when is_list(to) do %{
"type" => "Create",
"object" => %{"type" => "Note", "to" => to, "inReplyTo" => in_reply_to}
} = object
)
when is_list(to) and is_binary(in_reply_to) do
# image-only posts from pleroma apparently reach this MRF without the content field # image-only posts from pleroma apparently reach this MRF without the content field
content = object["object"]["content"] || "" content = object["object"]["content"] || ""

View File

@ -109,4 +109,29 @@ test "don't mention self" do
{:ok, %{"object" => %{"content" => filtered}}} = ForceMentionsInContent.filter(activity) {:ok, %{"object" => %{"content" => filtered}}} = ForceMentionsInContent.filter(activity)
assert filtered == "I'ma tired..." assert filtered == "I'ma tired..."
end end
test "don't mention in top-level posts" do
mario = insert(:user, nickname: "mario")
luigi = insert(:user, nickname: "luigi")
{:ok, post} = CommonAPI.post(mario, %{status: "Letsa go"})
activity = %{
"type" => "Create",
"actor" => mario.ap_id,
"object" => %{
"type" => "Note",
"actor" => mario.ap_id,
"content" => "Mama mia!",
"to" => [
luigi.ap_id,
Constants.as_public()
],
"quoteUrl" => Object.normalize(post).data["id"]
}
}
{:ok, %{"object" => %{"content" => filtered}}} = ForceMentionsInContent.filter(activity)
assert filtered == "Mama mia!"
end
end end