Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

58 rindas
1.5KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do
  5. use Ecto.Schema
  6. alias Pleroma.Web.ActivityPub.ObjectValidators.Types
  7. alias Pleroma.Web.ActivityPub.Utils
  8. import Ecto.Changeset
  9. import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
  10. @primary_key false
  11. embedded_schema do
  12. field(:id, :string, primary_key: true)
  13. field(:type, :string)
  14. field(:object, Types.ObjectID)
  15. field(:actor, Types.ObjectID)
  16. field(:context, :string)
  17. field(:to, {:array, :string})
  18. field(:cc, {:array, :string})
  19. end
  20. def cast_and_validate(data) do
  21. data
  22. |> cast_data()
  23. |> validate_data()
  24. end
  25. def cast_data(data) do
  26. %__MODULE__{}
  27. |> cast(data, [:id, :type, :object, :actor, :context, :to, :cc])
  28. end
  29. def validate_data(data_cng) do
  30. data_cng
  31. |> validate_inclusion(:type, ["Like"])
  32. |> validate_required([:id, :type, :object, :actor, :context, :to, :cc])
  33. |> validate_actor_presence()
  34. |> validate_object_presence()
  35. |> validate_existing_like()
  36. end
  37. def validate_existing_like(%{changes: %{actor: actor, object: object}} = cng) do
  38. if Utils.get_existing_like(actor, %{data: %{"id" => object}}) do
  39. cng
  40. |> add_error(:actor, "already liked this object")
  41. |> add_error(:object, "already liked by this actor")
  42. else
  43. cng
  44. end
  45. end
  46. def validate_existing_like(cng), do: cng
  47. end