logo

pleroma

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

follow_validator.ex (1094B)


  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.ObjectValidators.FollowValidator do
  5. use Ecto.Schema
  6. import Ecto.Changeset
  7. import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
  8. @primary_key false
  9. embedded_schema do
  10. quote do
  11. unquote do
  12. import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
  13. message_fields()
  14. activity_fields()
  15. end
  16. end
  17. field(:state, :string, default: "pending")
  18. end
  19. def cast_data(data) do
  20. %__MODULE__{}
  21. |> cast(data, __schema__(:fields))
  22. end
  23. defp validate_data(cng) do
  24. cng
  25. |> validate_required([:id, :type, :actor, :to, :cc, :object])
  26. |> validate_inclusion(:type, ["Follow"])
  27. |> validate_inclusion(:state, ~w{pending reject accept})
  28. |> validate_actor_presence()
  29. |> validate_actor_presence(field_name: :object)
  30. end
  31. def cast_and_validate(data) do
  32. data
  33. |> cast_data
  34. |> validate_data
  35. end
  36. end