logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

activity_expiration_policy.ex (1720B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy do
  5. @moduledoc "Adds expiration to all local Create activities"
  6. @behaviour Pleroma.Web.ActivityPub.MRF.Policy
  7. @impl true
  8. def filter(activity) do
  9. activity =
  10. if note?(activity) and local?(activity) do
  11. maybe_add_expiration(activity)
  12. else
  13. activity
  14. end
  15. {:ok, activity}
  16. end
  17. @impl true
  18. def describe, do: {:ok, %{}}
  19. defp local?(%{"actor" => actor}) do
  20. String.starts_with?(actor, Pleroma.Web.Endpoint.url())
  21. end
  22. defp note?(activity) do
  23. match?(%{"type" => "Create", "object" => %{"type" => "Note"}}, activity)
  24. end
  25. defp maybe_add_expiration(activity) do
  26. days = Pleroma.Config.get([:mrf_activity_expiration, :days], 365)
  27. expires_at = DateTime.utc_now() |> Timex.shift(days: days)
  28. with %{"expires_at" => existing_expires_at} <- activity,
  29. :lt <- DateTime.compare(existing_expires_at, expires_at) do
  30. activity
  31. else
  32. _ -> Map.put(activity, "expires_at", expires_at)
  33. end
  34. end
  35. @impl true
  36. def config_description do
  37. %{
  38. key: :mrf_activity_expiration,
  39. related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy",
  40. label: "MRF Activity Expiration Policy",
  41. description: "Adds automatic expiration to all local activities",
  42. children: [
  43. %{
  44. key: :days,
  45. type: :integer,
  46. description: "Default global expiration time for all local activities (in days)",
  47. suggestions: [90, 365]
  48. }
  49. ]
  50. }
  51. end
  52. end