diff options
| author | Haelwenn <contact+git.pleroma.social@hacktivis.me> | 2021-10-10 08:57:11 +0000 | 
|---|---|---|
| committer | Haelwenn <contact+git.pleroma.social@hacktivis.me> | 2021-10-10 08:57:11 +0000 | 
| commit | 6b5c2d5f866f748c20417517035f4814955d01dd (patch) | |
| tree | a36f8fa47ef6ade34369d55096e99bac8edf4a45 /lib | |
| parent | d8d819ddc77a12d6c83c75c95d8e658e77e353c6 (diff) | |
| parent | 23161526d4c4249a5da64d8a414ea644e2b0b93f (diff) | |
| download | pleroma-6b5c2d5f866f748c20417517035f4814955d01dd.tar.gz pleroma-6b5c2d5f866f748c20417517035f4814955d01dd.zip | |
Merge branch 'refactor/group_validator_fields' into 'develop'
object_validators: Group common fields in CommonValidations
See merge request pleroma/pleroma!3384
Diffstat (limited to 'lib')
18 files changed, 202 insertions, 220 deletions
| diff --git a/lib/pleroma/web/activity_pub/object_validators/accept_reject_validator.ex b/lib/pleroma/web/activity_pub/object_validators/accept_reject_validator.ex index b577a1044..7c3c8d0fa 100644 --- a/lib/pleroma/web/activity_pub/object_validators/accept_reject_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/accept_reject_validator.ex @@ -6,7 +6,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AcceptRejectValidator do    use Ecto.Schema    alias Pleroma.Activity -  alias Pleroma.EctoType.ActivityPub.ObjectValidators    import Ecto.Changeset    import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations @@ -14,12 +13,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AcceptRejectValidator do    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) -    field(:object, ObjectValidators.ObjectID) -    field(:actor, ObjectValidators.ObjectID) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end    end    def cast_data(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex b/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex index f885aabe4..fc482c9c0 100644 --- a/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex @@ -10,19 +10,20 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AddRemoveValidator do    require Pleroma.Constants -  alias Pleroma.EctoType.ActivityPub.ObjectValidators    alias Pleroma.User    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true)      field(:target) -    field(:object, ObjectValidators.ObjectID) -    field(:actor, ObjectValidators.ObjectID) -    field(:type) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) + +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end    end    def cast_and_validate(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex index 4db76f387..a7f2f6673 100644 --- a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex @@ -20,13 +20,15 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidator do    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) -    field(:object, ObjectValidators.ObjectID) -    field(:actor, ObjectValidators.ObjectID) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end +      field(:context, :string) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: [])      field(:published, ObjectValidators.DateTime)    end diff --git a/lib/pleroma/web/activity_pub/object_validators/answer_validator.ex b/lib/pleroma/web/activity_pub/object_validators/answer_validator.ex index 3451e1ff8..4325e44f7 100644 --- a/lib/pleroma/web/activity_pub/object_validators/answer_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/answer_validator.ex @@ -15,12 +15,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnswerValidator do    @derive Jason.Encoder    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) -    field(:bto, ObjectValidators.Recipients, default: []) -    field(:bcc, ObjectValidators.Recipients, default: []) -    field(:type, :string) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +      end +    end +      field(:name, :string)      field(:inReplyTo, ObjectValidators.ObjectID)      field(:attributedTo, ObjectValidators.ObjectID) diff --git a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex index 0d987116c..0aa249c4c 100644 --- a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex @@ -6,10 +6,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do    use Ecto.Schema    alias Pleroma.EctoType.ActivityPub.ObjectValidators -  alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations -  alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator    alias Pleroma.Web.ActivityPub.Transmogrifier    import Ecto.Changeset @@ -18,38 +16,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do    @derive Jason.Encoder    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) -    field(:bto, ObjectValidators.Recipients, default: []) -    field(:bcc, ObjectValidators.Recipients, default: []) -    embeds_many(:tag, TagValidator) -    field(:type, :string) - -    field(:name, :string) -    field(:summary, :string) -    field(:content, :string) - -    field(:context, :string) -    # short identifier for PleromaFE to group statuses by context -    field(:context_id, :integer) - -    # TODO: Remove actor on objects -    field(:actor, ObjectValidators.ObjectID) - -    field(:attributedTo, ObjectValidators.ObjectID) -    field(:published, ObjectValidators.DateTime) -    field(:emoji, ObjectValidators.Emoji, default: %{}) -    field(:sensitive, :boolean, default: false) -    embeds_many(:attachment, AttachmentValidator) -    field(:replies_count, :integer, default: 0) -    field(:like_count, :integer, default: 0) -    field(:announcement_count, :integer, default: 0) -    field(:inReplyTo, ObjectValidators.ObjectID) -    field(:url, ObjectValidators.Uri) - -    field(:likes, {:array, ObjectValidators.ObjectID}, default: []) -    field(:announcements, {:array, ObjectValidators.ObjectID}, default: []) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        object_fields() +        status_object_fields() +      end +    end      field(:replies, {:array, ObjectValidators.ObjectID}, default: [])    end diff --git a/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex b/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex index 572687deb..331ec9050 100644 --- a/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex @@ -5,11 +5,8 @@  defmodule Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator do    use Ecto.Schema -  alias Pleroma.EctoType.ActivityPub.ObjectValidators -  alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations -  alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator    alias Pleroma.Web.ActivityPub.Transmogrifier    import Ecto.Changeset @@ -18,38 +15,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator do    @derive Jason.Encoder    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) -    field(:bto, ObjectValidators.Recipients, default: []) -    field(:bcc, ObjectValidators.Recipients, default: []) -    embeds_many(:tag, TagValidator) -    field(:type, :string) - -    field(:name, :string) -    field(:summary, :string) -    field(:content, :string) - -    field(:context, :string) -    # short identifier for PleromaFE to group statuses by context -    field(:context_id, :integer) - -    # TODO: Remove actor on objects -    field(:actor, ObjectValidators.ObjectID) - -    field(:attributedTo, ObjectValidators.ObjectID) -    field(:published, ObjectValidators.DateTime) -    field(:emoji, ObjectValidators.Emoji, default: %{}) -    field(:sensitive, :boolean, default: false) -    embeds_many(:attachment, AttachmentValidator) -    field(:replies_count, :integer, default: 0) -    field(:like_count, :integer, default: 0) -    field(:announcement_count, :integer, default: 0) -    field(:inReplyTo, ObjectValidators.ObjectID) -    field(:url, ObjectValidators.Uri) - -    field(:likes, {:array, ObjectValidators.ObjectID}, default: []) -    field(:announcements, {:array, ObjectValidators.ObjectID}, default: []) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        object_fields() +        status_object_fields() +      end +    end    end    def cast_and_apply(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/block_validator.ex b/lib/pleroma/web/activity_pub/object_validators/block_validator.ex index 88948135f..400e5e278 100644 --- a/lib/pleroma/web/activity_pub/object_validators/block_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/block_validator.ex @@ -5,20 +5,21 @@  defmodule Pleroma.Web.ActivityPub.ObjectValidators.BlockValidator do    use Ecto.Schema -  alias Pleroma.EctoType.ActivityPub.ObjectValidators +  alias Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations    import Ecto.Changeset -  import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations    @primary_key false +  @derive Jason.Encoder    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) -    field(:actor, ObjectValidators.ObjectID) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) -    field(:object, ObjectValidators.ObjectID) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end    end    def cast_data(data) do @@ -30,8 +31,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.BlockValidator do      cng      |> validate_required([:id, :type, :actor, :to, :cc, :object])      |> validate_inclusion(:type, ["Block"]) -    |> validate_actor_presence() -    |> validate_actor_presence(field_name: :object) +    |> CommonValidations.validate_actor_presence() +    |> CommonValidations.validate_actor_presence(field_name: :object)    end    def cast_and_validate(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex new file mode 100644 index 000000000..872f80ec3 --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex @@ -0,0 +1,68 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFields do +  alias Pleroma.EctoType.ActivityPub.ObjectValidators +  alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator +  alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator + +  # Activities and Objects, except (Create)ChatMessage +  defmacro message_fields do +    quote bind_quoted: binding() do +      field(:type, :string) +      field(:id, ObjectValidators.ObjectID, primary_key: true) + +      field(:to, ObjectValidators.Recipients, default: []) +      field(:cc, ObjectValidators.Recipients, default: []) +      field(:bto, ObjectValidators.Recipients, default: []) +      field(:bcc, ObjectValidators.Recipients, default: []) +    end +  end + +  defmacro activity_fields do +    quote bind_quoted: binding() do +      field(:object, ObjectValidators.ObjectID) +      field(:actor, ObjectValidators.ObjectID) +    end +  end + +  # All objects except Answer and CHatMessage +  defmacro object_fields do +    quote bind_quoted: binding() do +      field(:content, :string) + +      field(:published, ObjectValidators.DateTime) +      field(:emoji, ObjectValidators.Emoji, default: %{}) +      embeds_many(:attachment, AttachmentValidator) +    end +  end + +  # Basically objects that aren't ChatMessage and Answer +  defmacro status_object_fields do +    quote bind_quoted: binding() do +      # TODO: Remove actor on objects +      field(:actor, ObjectValidators.ObjectID) +      field(:attributedTo, ObjectValidators.ObjectID) + +      embeds_many(:tag, TagValidator) + +      field(:name, :string) +      field(:summary, :string) + +      field(:context, :string) +      # short identifier for PleromaFE to group statuses by context +      field(:context_id, :integer) + +      field(:sensitive, :boolean, default: false) +      field(:replies_count, :integer, default: 0) +      field(:like_count, :integer, default: 0) +      field(:announcement_count, :integer, default: 0) +      field(:inReplyTo, ObjectValidators.ObjectID) +      field(:url, ObjectValidators.Uri) + +      field(:likes, {:array, ObjectValidators.ObjectID}, default: []) +      field(:announcements, {:array, ObjectValidators.ObjectID}, default: []) +    end +  end +end diff --git a/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex index 7a31a99bf..6551f64ca 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex @@ -17,11 +17,16 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator do    @primary_key false    embedded_schema do +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        activity_fields() +      end +    end +      field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:actor, ObjectValidators.ObjectID)      field(:type, :string)      field(:to, ObjectValidators.Recipients, default: []) -    field(:object, ObjectValidators.ObjectID)    end    def cast_and_apply(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex index d2de53049..803b5d5a1 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex @@ -20,14 +20,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator do    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:actor, ObjectValidators.ObjectID) -    field(:type, :string) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) -    field(:bto, ObjectValidators.Recipients, default: []) -    field(:bcc, ObjectValidators.Recipients, default: []) -    field(:object, ObjectValidators.ObjectID) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end +      field(:expires_at, ObjectValidators.DateTime)      # Should be moved to object, done for CommonAPI.Utils.make_context diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex index 05f93da82..f0c99356e 100644 --- a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -15,13 +15,15 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator do    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) -    field(:actor, ObjectValidators.ObjectID) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end +      field(:deleted_activity_id, ObjectValidators.ObjectID) -    field(:object, ObjectValidators.ObjectID)    end    def cast_data(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex index a18bd7540..9eaaf8319 100644 --- a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex @@ -5,7 +5,6 @@  defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do    use Ecto.Schema -  alias Pleroma.EctoType.ActivityPub.ObjectValidators    alias Pleroma.Object    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes @@ -15,14 +14,16 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) -    field(:object, ObjectValidators.ObjectID) -    field(:actor, ObjectValidators.ObjectID) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end +      field(:context, :string)      field(:content, :string) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: [])    end    def cast_and_validate(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/event_validator.ex b/lib/pleroma/web/activity_pub/object_validators/event_validator.ex index fee2e997a..34a3031c3 100644 --- a/lib/pleroma/web/activity_pub/object_validators/event_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/event_validator.ex @@ -5,11 +5,8 @@  defmodule Pleroma.Web.ActivityPub.ObjectValidators.EventValidator do    use Ecto.Schema -  alias Pleroma.EctoType.ActivityPub.ObjectValidators -  alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations -  alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator    alias Pleroma.Web.ActivityPub.Transmogrifier    import Ecto.Changeset @@ -19,38 +16,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EventValidator do    # Extends from NoteValidator    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) -    field(:bto, ObjectValidators.Recipients, default: []) -    field(:bcc, ObjectValidators.Recipients, default: []) -    embeds_many(:tag, TagValidator) -    field(:type, :string) - -    field(:name, :string) -    field(:summary, :string) -    field(:content, :string) - -    field(:context, :string) -    # short identifier for PleromaFE to group statuses by context -    field(:context_id, :integer) - -    # TODO: Remove actor on objects -    field(:actor, ObjectValidators.ObjectID) - -    field(:attributedTo, ObjectValidators.ObjectID) -    field(:published, ObjectValidators.DateTime) -    field(:emoji, ObjectValidators.Emoji, default: %{}) -    field(:sensitive, :boolean, default: false) -    embeds_many(:attachment, AttachmentValidator) -    field(:replies_count, :integer, default: 0) -    field(:like_count, :integer, default: 0) -    field(:announcement_count, :integer, default: 0) -    field(:inReplyTo, ObjectValidators.ObjectID) -    field(:url, ObjectValidators.Uri) - -    field(:likes, {:array, ObjectValidators.ObjectID}, default: []) -    field(:announcements, {:array, ObjectValidators.ObjectID}, default: []) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        object_fields() +        status_object_fields() +      end +    end    end    def cast_and_apply(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/follow_validator.ex b/lib/pleroma/web/activity_pub/object_validators/follow_validator.ex index 239cee5e7..c061ebba9 100644 --- a/lib/pleroma/web/activity_pub/object_validators/follow_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/follow_validator.ex @@ -5,20 +5,20 @@  defmodule Pleroma.Web.ActivityPub.ObjectValidators.FollowValidator do    use Ecto.Schema -  alias Pleroma.EctoType.ActivityPub.ObjectValidators -    import Ecto.Changeset    import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) -    field(:actor, ObjectValidators.ObjectID) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) -    field(:object, ObjectValidators.ObjectID) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end +      field(:state, :string, default: "pending")    end diff --git a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex index 8b99c89b9..35e000d72 100644 --- a/lib/pleroma/web/activity_pub/object_validators/like_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/like_validator.ex @@ -5,7 +5,6 @@  defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do    use Ecto.Schema -  alias Pleroma.EctoType.ActivityPub.ObjectValidators    alias Pleroma.Object    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes    alias Pleroma.Web.ActivityPub.Utils @@ -16,13 +15,15 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) -    field(:object, ObjectValidators.ObjectID) -    field(:actor, ObjectValidators.ObjectID) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end +      field(:context, :string) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: [])    end    def cast_and_validate(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex index 083d08ec4..bdddfdaeb 100644 --- a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex @@ -6,11 +6,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do    use Ecto.Schema    alias Pleroma.EctoType.ActivityPub.ObjectValidators -  alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes    alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations    alias Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator -  alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator    alias Pleroma.Web.ActivityPub.Transmogrifier    import Ecto.Changeset @@ -20,35 +18,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do    # Extends from NoteValidator    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) -    field(:bto, ObjectValidators.Recipients, default: []) -    field(:bcc, ObjectValidators.Recipients, default: []) -    embeds_many(:tag, TagValidator) -    field(:type, :string) -    field(:content, :string) -    field(:context, :string) - -    # TODO: Remove actor on objects -    field(:actor, ObjectValidators.ObjectID) - -    field(:attributedTo, ObjectValidators.ObjectID) -    field(:summary, :string) -    field(:published, ObjectValidators.DateTime) -    field(:emoji, ObjectValidators.Emoji, default: %{}) -    field(:sensitive, :boolean, default: false) -    embeds_many(:attachment, AttachmentValidator) -    field(:replies_count, :integer, default: 0) -    field(:like_count, :integer, default: 0) -    field(:announcement_count, :integer, default: 0) -    field(:inReplyTo, ObjectValidators.ObjectID) -    field(:url, ObjectValidators.Uri) -    # short identifier for PleromaFE to group statuses by context -    field(:context_id, :integer) - -    field(:likes, {:array, ObjectValidators.ObjectID}, default: []) -    field(:announcements, {:array, ObjectValidators.ObjectID}, default: []) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        object_fields() +        status_object_fields() +      end +    end      field(:closed, ObjectValidators.DateTime)      field(:voters, {:array, ObjectValidators.ObjectID}, default: []) diff --git a/lib/pleroma/web/activity_pub/object_validators/undo_validator.ex b/lib/pleroma/web/activity_pub/object_validators/undo_validator.ex index 6ff648c84..703643e3f 100644 --- a/lib/pleroma/web/activity_pub/object_validators/undo_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/undo_validator.ex @@ -6,7 +6,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UndoValidator do    use Ecto.Schema    alias Pleroma.Activity -  alias Pleroma.EctoType.ActivityPub.ObjectValidators    alias Pleroma.User    import Ecto.Changeset @@ -15,12 +14,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UndoValidator do    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) -    field(:object, ObjectValidators.ObjectID) -    field(:actor, ObjectValidators.ObjectID) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: []) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +        activity_fields() +      end +    end    end    def cast_and_validate(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/update_validator.ex b/lib/pleroma/web/activity_pub/object_validators/update_validator.ex index 6bb1dc7fa..a1fae47f5 100644 --- a/lib/pleroma/web/activity_pub/object_validators/update_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/update_validator.ex @@ -13,11 +13,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UpdateValidator do    @primary_key false    embedded_schema do -    field(:id, ObjectValidators.ObjectID, primary_key: true) -    field(:type, :string) +    quote do +      unquote do +        import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields +        message_fields() +      end +    end +      field(:actor, ObjectValidators.ObjectID) -    field(:to, ObjectValidators.Recipients, default: []) -    field(:cc, ObjectValidators.Recipients, default: [])      # In this case, we save the full object in this activity instead of just a      # reference, so we can always see what was actually changed by this.      field(:object, :map) | 
