Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

76 行
1.8KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator do
  5. use Ecto.Schema
  6. alias Pleroma.Activity
  7. alias Pleroma.EctoType.ActivityPub.ObjectValidators
  8. import Ecto.Changeset
  9. import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
  10. @primary_key false
  11. embedded_schema do
  12. field(:id, ObjectValidators.ObjectID, primary_key: true)
  13. field(:type, :string)
  14. field(:actor, ObjectValidators.ObjectID)
  15. field(:to, ObjectValidators.Recipients, default: [])
  16. field(:cc, ObjectValidators.Recipients, default: [])
  17. field(:deleted_activity_id, ObjectValidators.ObjectID)
  18. field(:object, ObjectValidators.ObjectID)
  19. end
  20. def cast_data(data) do
  21. %__MODULE__{}
  22. |> cast(data, __schema__(:fields))
  23. end
  24. def add_deleted_activity_id(cng) do
  25. object =
  26. cng
  27. |> get_field(:object)
  28. with %Activity{id: id} <- Activity.get_create_by_object_ap_id(object) do
  29. cng
  30. |> put_change(:deleted_activity_id, id)
  31. else
  32. _ -> cng
  33. end
  34. end
  35. @deletable_types ~w{
  36. Answer
  37. Article
  38. Audio
  39. ChatMessage
  40. Event
  41. Note
  42. Page
  43. Question
  44. Tombstone
  45. Video
  46. }
  47. defp validate_data(cng) do
  48. cng
  49. |> validate_required([:id, :type, :actor, :to, :cc, :object])
  50. |> validate_inclusion(:type, ["Delete"])
  51. |> validate_actor_presence()
  52. |> validate_modification_rights()
  53. |> validate_object_or_user_presence(allowed_types: @deletable_types)
  54. |> add_deleted_activity_id()
  55. end
  56. def do_not_federate?(cng) do
  57. !same_domain?(cng)
  58. end
  59. def cast_and_validate(data) do
  60. data
  61. |> cast_data
  62. |> validate_data
  63. end
  64. end