logo

pleroma

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

event_validator.ex (1747B)


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