50 lines
1.3 KiB
Elixir
50 lines
1.3 KiB
Elixir
|
defmodule Pleroma.Web.ActivityPub.MRF.RejectNewlyCreatedAccountNotesPolicy do
|
||
|
@behaviour Pleroma.Web.ActivityPub.MRF.Policy
|
||
|
|
||
|
alias Pleroma.User
|
||
|
|
||
|
@moduledoc """
|
||
|
Rejects notes from accounts that were created below a certain threshold of time ago
|
||
|
"""
|
||
|
@impl true
|
||
|
def filter(
|
||
|
%{
|
||
|
"type" => type,
|
||
|
"actor" => actor
|
||
|
} = activity
|
||
|
) when type in ["Note", "Create"] do
|
||
|
min_age = Pleroma.Config.get([:mrf_reject_newly_created_account_notes, :age])
|
||
|
|
||
|
with %User{} = user <- Pleroma.User.get_cached_by_ap_id(actor),
|
||
|
true <- Timex.diff(Timex.now(), user.inserted_at, :seconds) < min_age do
|
||
|
{:reject, "Account created too recently"}
|
||
|
else
|
||
|
_ -> {:ok, activity}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
@impl true
|
||
|
def filter(object), do: {:ok, object}
|
||
|
|
||
|
@impl true
|
||
|
def describe, do: {:ok, %{}}
|
||
|
|
||
|
@impl true
|
||
|
def config_description do
|
||
|
%{
|
||
|
key: :mrf_reject_newly_created_account_notes,
|
||
|
related_policy: "Pleroma.Web.ActivityPub.MRF.RejectNewlyCreatedAccountNotesPolicy",
|
||
|
label: "MRF Reject New Accounts",
|
||
|
description: "Reject notes from accounts created too recently",
|
||
|
children: [
|
||
|
%{
|
||
|
key: :age,
|
||
|
type: :integer,
|
||
|
description: "Time below which to reject (in seconds)",
|
||
|
suggestions: [86_400]
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
end
|
||
|
end
|