logo

pleroma

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

answer_validator.ex (1770B)


  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.AnswerValidator do
  5. use Ecto.Schema
  6. alias Pleroma.EctoType.ActivityPub.ObjectValidators
  7. alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
  8. alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
  9. import Ecto.Changeset
  10. @primary_key false
  11. @derive Jason.Encoder
  12. embedded_schema do
  13. quote do
  14. unquote do
  15. import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
  16. message_fields()
  17. end
  18. end
  19. field(:name, :string)
  20. field(:inReplyTo, ObjectValidators.ObjectID)
  21. field(:attributedTo, ObjectValidators.ObjectID)
  22. field(:context, :string)
  23. # TODO: Remove actor on objects
  24. field(:actor, ObjectValidators.ObjectID)
  25. end
  26. def cast_and_apply(data) do
  27. data
  28. |> cast_data()
  29. |> apply_action(:insert)
  30. end
  31. def cast_and_validate(data) do
  32. data
  33. |> cast_data()
  34. |> validate_data()
  35. end
  36. def cast_data(data) do
  37. %__MODULE__{}
  38. |> changeset(data)
  39. end
  40. def changeset(struct, data) do
  41. data =
  42. data
  43. |> CommonFixes.fix_actor()
  44. |> CommonFixes.fix_object_defaults()
  45. struct
  46. |> cast(data, __schema__(:fields))
  47. end
  48. defp validate_data(data_cng) do
  49. data_cng
  50. |> validate_inclusion(:type, ["Answer"])
  51. |> validate_required([:id, :inReplyTo, :name, :attributedTo, :actor])
  52. |> CommonValidations.validate_any_presence([:cc, :to])
  53. |> CommonValidations.validate_fields_match([:actor, :attributedTo])
  54. |> CommonValidations.validate_actor_presence()
  55. |> CommonValidations.validate_host_match()
  56. end
  57. end