logo

pleroma

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

software_policy.ex (1425B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.ActivityPub.MRF.SoftwarePolicy do
  5. @moduledoc "Filter activities depending on the software used"
  6. @behaviour Pleroma.Web.ActivityPub.MRF.Policy
  7. alias Pleroma.Instances.Instance
  8. defp check_wildebeest(%URI{host: nil}, object), do: {:ok, object}
  9. defp check_wildebeest(%URI{} = uri, object) do
  10. instance_info = Instance.get_or_update_metadata(uri)
  11. if instance_info && Map.get(instance_info, :software_name) == "wildebeest" do
  12. {:reject, "[SoftwarePolicy] Cloudflare Wildebeest"}
  13. else
  14. {:ok, object}
  15. end
  16. end
  17. @impl true
  18. def filter(%{"id" => actor} = object) do
  19. uri = URI.parse(actor)
  20. with {:ok, object} <- check_wildebeest(uri, object) do
  21. {:ok, object}
  22. else
  23. {:reject, nil} -> {:reject, "[SoftwarePolicy]"}
  24. {:reject, _} = e -> e
  25. _ -> {:reject, "[SoftwarePolicy]"}
  26. end
  27. end
  28. def filter(object) when is_binary(object) do
  29. uri = URI.parse(object)
  30. with {:ok, object} <- check_wildebeest(uri, object) do
  31. {:ok, object}
  32. else
  33. {:reject, nil} -> {:reject, "[SoftwarePolicy]"}
  34. {:reject, _} = e -> e
  35. _ -> {:reject, "[SoftwarePolicy]"}
  36. end
  37. end
  38. def filter(object), do: {:ok, object}
  39. @impl true
  40. def describe, do: {:ok, %{}}
  41. end