logo

pleroma

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

recipients.ex (1034B)


  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.EctoType.ActivityPub.ObjectValidators.Recipients do
  5. use Ecto.Type
  6. alias Pleroma.EctoType.ActivityPub.ObjectValidators.ObjectID
  7. def type, do: {:array, ObjectID}
  8. def cast(object) when is_binary(object) do
  9. cast([object])
  10. end
  11. def cast(object) when is_map(object) do
  12. case ObjectID.cast(object) do
  13. {:ok, data} -> {:ok, [data]}
  14. _ -> :error
  15. end
  16. end
  17. def cast(data) when is_list(data) do
  18. data =
  19. data
  20. |> Enum.reduce_while([], fn element, list ->
  21. case ObjectID.cast(element) do
  22. {:ok, id} ->
  23. {:cont, [id | list]}
  24. _ ->
  25. {:cont, list}
  26. end
  27. end)
  28. |> Enum.sort()
  29. |> Enum.uniq()
  30. {:ok, data}
  31. end
  32. def cast(data) do
  33. {:error, data}
  34. end
  35. def dump(data) do
  36. {:ok, data}
  37. end
  38. def load(data) do
  39. {:ok, data}
  40. end
  41. end