object_validators: Group common fields in CommonValidations

Notes:
- QuestionValidator didn't have a :name field but that seems like a mistake
- `_fields` functions can't inherit others because of some Validators
- bto/bcc fields were absent in activities, also seems like a mistake
  (Well IIRC we don't or barely support bto/bcc anyway)
This commit is contained in:
Haelwenn (lanodan) Monnier 2021-04-01 13:26:32 +02:00
parent 390ceb9f94
commit 23161526d4
19 changed files with 211 additions and 223 deletions

View file

@ -6,7 +6,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AcceptRejectValidator do
use Ecto.Schema use Ecto.Schema
alias Pleroma.Activity alias Pleroma.Activity
alias Pleroma.EctoType.ActivityPub.ObjectValidators
import Ecto.Changeset import Ecto.Changeset
import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
@ -14,12 +13,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AcceptRejectValidator do
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
field(:object, ObjectValidators.ObjectID) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:actor, ObjectValidators.ObjectID) message_fields()
field(:to, ObjectValidators.Recipients, default: []) activity_fields()
field(:cc, ObjectValidators.Recipients, default: []) end
end
end end
def cast_data(data) do def cast_data(data) do

View file

@ -10,19 +10,20 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AddRemoveValidator do
require Pleroma.Constants require Pleroma.Constants
alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.User alias Pleroma.User
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true)
field(:target) field(:target)
field(:object, ObjectValidators.ObjectID)
field(:actor, ObjectValidators.ObjectID) quote do
field(:type) unquote do
field(:to, ObjectValidators.Recipients, default: []) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:cc, ObjectValidators.Recipients, default: []) message_fields()
activity_fields()
end
end
end end
def cast_and_validate(data) do def cast_and_validate(data) do

View file

@ -20,13 +20,15 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidator do
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
field(:object, ObjectValidators.ObjectID) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:actor, ObjectValidators.ObjectID) message_fields()
activity_fields()
end
end
field(:context, :string) field(:context, :string)
field(:to, ObjectValidators.Recipients, default: [])
field(:cc, ObjectValidators.Recipients, default: [])
field(:published, ObjectValidators.DateTime) field(:published, ObjectValidators.DateTime)
end end

View file

@ -15,12 +15,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnswerValidator do
@derive Jason.Encoder @derive Jason.Encoder
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:to, ObjectValidators.Recipients, default: []) unquote do
field(:cc, ObjectValidators.Recipients, default: []) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:bto, ObjectValidators.Recipients, default: []) message_fields()
field(:bcc, ObjectValidators.Recipients, default: []) end
field(:type, :string) end
field(:name, :string) field(:name, :string)
field(:inReplyTo, ObjectValidators.ObjectID) field(:inReplyTo, ObjectValidators.ObjectID)
field(:attributedTo, ObjectValidators.ObjectID) field(:attributedTo, ObjectValidators.ObjectID)

View file

@ -6,10 +6,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
use Ecto.Schema use Ecto.Schema
alias Pleroma.EctoType.ActivityPub.ObjectValidators alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator
alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Transmogrifier
import Ecto.Changeset import Ecto.Changeset
@ -18,38 +16,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
@derive Jason.Encoder @derive Jason.Encoder
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:to, ObjectValidators.Recipients, default: []) unquote do
field(:cc, ObjectValidators.Recipients, default: []) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:bto, ObjectValidators.Recipients, default: []) message_fields()
field(:bcc, ObjectValidators.Recipients, default: []) object_fields()
embeds_many(:tag, TagValidator) status_object_fields()
field(:type, :string) end
end
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: [])
field(:replies, {:array, ObjectValidators.ObjectID}, default: []) field(:replies, {:array, ObjectValidators.ObjectID}, default: [])
end end

View file

@ -5,11 +5,8 @@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator do defmodule Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator do
use Ecto.Schema 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.CommonFixes
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator
alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Transmogrifier
import Ecto.Changeset import Ecto.Changeset
@ -18,38 +15,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator do
@derive Jason.Encoder @derive Jason.Encoder
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:to, ObjectValidators.Recipients, default: []) unquote do
field(:cc, ObjectValidators.Recipients, default: []) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:bto, ObjectValidators.Recipients, default: []) message_fields()
field(:bcc, ObjectValidators.Recipients, default: []) object_fields()
embeds_many(:tag, TagValidator) status_object_fields()
field(:type, :string) end
end
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: [])
end end
def cast_and_apply(data) do def cast_and_apply(data) do

View file

@ -5,20 +5,21 @@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.BlockValidator do defmodule Pleroma.Web.ActivityPub.ObjectValidators.BlockValidator do
use Ecto.Schema use Ecto.Schema
alias Pleroma.EctoType.ActivityPub.ObjectValidators alias Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
import Ecto.Changeset import Ecto.Changeset
import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
@primary_key false @primary_key false
@derive Jason.Encoder
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
field(:actor, ObjectValidators.ObjectID) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:to, ObjectValidators.Recipients, default: []) message_fields()
field(:cc, ObjectValidators.Recipients, default: []) activity_fields()
field(:object, ObjectValidators.ObjectID) end
end
end end
def cast_data(data) do def cast_data(data) do
@ -30,8 +31,8 @@ defp validate_data(cng) do
cng cng
|> validate_required([:id, :type, :actor, :to, :cc, :object]) |> validate_required([:id, :type, :actor, :to, :cc, :object])
|> validate_inclusion(:type, ["Block"]) |> validate_inclusion(:type, ["Block"])
|> validate_actor_presence() |> CommonValidations.validate_actor_presence()
|> validate_actor_presence(field_name: :object) |> CommonValidations.validate_actor_presence(field_name: :object)
end end
def cast_and_validate(data) do def cast_and_validate(data) do

View file

@ -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

View file

@ -17,11 +17,16 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator do
@primary_key false @primary_key false
embedded_schema do 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(:id, ObjectValidators.ObjectID, primary_key: true)
field(:actor, ObjectValidators.ObjectID)
field(:type, :string) field(:type, :string)
field(:to, ObjectValidators.Recipients, default: []) field(:to, ObjectValidators.Recipients, default: [])
field(:object, ObjectValidators.ObjectID)
end end
def cast_and_apply(data) do def cast_and_apply(data) do

View file

@ -20,14 +20,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator do
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:actor, ObjectValidators.ObjectID) unquote do
field(:type, :string) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:to, ObjectValidators.Recipients, default: []) message_fields()
field(:cc, ObjectValidators.Recipients, default: []) activity_fields()
field(:bto, ObjectValidators.Recipients, default: []) end
field(:bcc, ObjectValidators.Recipients, default: []) end
field(:object, ObjectValidators.ObjectID)
field(:expires_at, ObjectValidators.DateTime) field(:expires_at, ObjectValidators.DateTime)
# Should be moved to object, done for CommonAPI.Utils.make_context # Should be moved to object, done for CommonAPI.Utils.make_context

View file

@ -15,13 +15,15 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator do
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
field(:actor, ObjectValidators.ObjectID) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:to, ObjectValidators.Recipients, default: []) message_fields()
field(:cc, ObjectValidators.Recipients, default: []) activity_fields()
end
end
field(:deleted_activity_id, ObjectValidators.ObjectID) field(:deleted_activity_id, ObjectValidators.ObjectID)
field(:object, ObjectValidators.ObjectID)
end end
def cast_data(data) do def cast_data(data) do

View file

@ -5,7 +5,6 @@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do
use Ecto.Schema use Ecto.Schema
alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.Object alias Pleroma.Object
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
@ -15,14 +14,16 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator do
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
field(:object, ObjectValidators.ObjectID) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:actor, ObjectValidators.ObjectID) message_fields()
activity_fields()
end
end
field(:context, :string) field(:context, :string)
field(:content, :string) field(:content, :string)
field(:to, ObjectValidators.Recipients, default: [])
field(:cc, ObjectValidators.Recipients, default: [])
end end
def cast_and_validate(data) do def cast_and_validate(data) do

View file

@ -5,11 +5,8 @@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.EventValidator do defmodule Pleroma.Web.ActivityPub.ObjectValidators.EventValidator do
use Ecto.Schema 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.CommonFixes
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator
alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Transmogrifier
import Ecto.Changeset import Ecto.Changeset
@ -19,38 +16,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EventValidator do
# Extends from NoteValidator # Extends from NoteValidator
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:to, ObjectValidators.Recipients, default: []) unquote do
field(:cc, ObjectValidators.Recipients, default: []) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:bto, ObjectValidators.Recipients, default: []) message_fields()
field(:bcc, ObjectValidators.Recipients, default: []) object_fields()
embeds_many(:tag, TagValidator) status_object_fields()
field(:type, :string) end
end
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: [])
end end
def cast_and_apply(data) do def cast_and_apply(data) do

View file

@ -5,20 +5,20 @@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.FollowValidator do defmodule Pleroma.Web.ActivityPub.ObjectValidators.FollowValidator do
use Ecto.Schema use Ecto.Schema
alias Pleroma.EctoType.ActivityPub.ObjectValidators
import Ecto.Changeset import Ecto.Changeset
import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
field(:actor, ObjectValidators.ObjectID) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:to, ObjectValidators.Recipients, default: []) message_fields()
field(:cc, ObjectValidators.Recipients, default: []) activity_fields()
field(:object, ObjectValidators.ObjectID) end
end
field(:state, :string, default: "pending") field(:state, :string, default: "pending")
end end

View file

@ -5,7 +5,6 @@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do
use Ecto.Schema use Ecto.Schema
alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.Object alias Pleroma.Object
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Utils
@ -16,13 +15,15 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
field(:object, ObjectValidators.ObjectID) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:actor, ObjectValidators.ObjectID) message_fields()
activity_fields()
end
end
field(:context, :string) field(:context, :string)
field(:to, ObjectValidators.Recipients, default: [])
field(:cc, ObjectValidators.Recipients, default: [])
end end
def cast_and_validate(data) do def cast_and_validate(data) do

View file

@ -6,11 +6,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do
use Ecto.Schema use Ecto.Schema
alias Pleroma.EctoType.ActivityPub.ObjectValidators alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
alias Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator alias Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator
alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator
alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Transmogrifier
import Ecto.Changeset import Ecto.Changeset
@ -20,35 +18,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do
# Extends from NoteValidator # Extends from NoteValidator
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:to, ObjectValidators.Recipients, default: []) unquote do
field(:cc, ObjectValidators.Recipients, default: []) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:bto, ObjectValidators.Recipients, default: []) message_fields()
field(:bcc, ObjectValidators.Recipients, default: []) object_fields()
embeds_many(:tag, TagValidator) status_object_fields()
field(:type, :string) end
field(:content, :string) end
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: [])
field(:closed, ObjectValidators.DateTime) field(:closed, ObjectValidators.DateTime)
field(:voters, {:array, ObjectValidators.ObjectID}, default: []) field(:voters, {:array, ObjectValidators.ObjectID}, default: [])

View file

@ -6,7 +6,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UndoValidator do
use Ecto.Schema use Ecto.Schema
alias Pleroma.Activity alias Pleroma.Activity
alias Pleroma.EctoType.ActivityPub.ObjectValidators
alias Pleroma.User alias Pleroma.User
import Ecto.Changeset import Ecto.Changeset
@ -15,12 +14,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UndoValidator do
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
field(:object, ObjectValidators.ObjectID) import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
field(:actor, ObjectValidators.ObjectID) message_fields()
field(:to, ObjectValidators.Recipients, default: []) activity_fields()
field(:cc, ObjectValidators.Recipients, default: []) end
end
end end
def cast_and_validate(data) do def cast_and_validate(data) do

View file

@ -13,11 +13,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UpdateValidator do
@primary_key false @primary_key false
embedded_schema do embedded_schema do
field(:id, ObjectValidators.ObjectID, primary_key: true) quote do
field(:type, :string) unquote do
import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields
message_fields()
end
end
field(:actor, ObjectValidators.ObjectID) 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 # 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. # reference, so we can always see what was actually changed by this.
field(:object, :map) field(:object, :map)

View file

@ -67,7 +67,9 @@ test "it accepts Add/Remove activities" do
"target" => "https://example.com/users/lain/collections/featured", "target" => "https://example.com/users/lain/collections/featured",
"type" => "Add", "type" => "Add",
"to" => [Pleroma.Constants.as_public()], "to" => [Pleroma.Constants.as_public()],
"cc" => ["https://example.com/users/lain/followers"] "cc" => ["https://example.com/users/lain/followers"],
"bcc" => [],
"bto" => []
} }
assert {:ok, activity} = Transmogrifier.handle_incoming(message) assert {:ok, activity} = Transmogrifier.handle_incoming(message)
@ -82,7 +84,9 @@ test "it accepts Add/Remove activities" do
"target" => "https://example.com/users/lain/collections/featured", "target" => "https://example.com/users/lain/collections/featured",
"type" => "Remove", "type" => "Remove",
"to" => [Pleroma.Constants.as_public()], "to" => [Pleroma.Constants.as_public()],
"cc" => ["https://example.com/users/lain/followers"] "cc" => ["https://example.com/users/lain/followers"],
"bcc" => [],
"bto" => []
} }
assert {:ok, activity} = Transmogrifier.handle_incoming(remove) assert {:ok, activity} = Transmogrifier.handle_incoming(remove)
@ -161,7 +165,9 @@ test "Add/Remove activities for remote users without featured address" do
"target" => "https://#{host}/users/#{user.nickname}/collections/featured", "target" => "https://#{host}/users/#{user.nickname}/collections/featured",
"type" => "Add", "type" => "Add",
"to" => [Pleroma.Constants.as_public()], "to" => [Pleroma.Constants.as_public()],
"cc" => ["https://#{host}/users/#{user.nickname}/followers"] "cc" => ["https://#{host}/users/#{user.nickname}/followers"],
"bcc" => [],
"bto" => []
} }
assert {:ok, activity} = Transmogrifier.handle_incoming(message) assert {:ok, activity} = Transmogrifier.handle_incoming(message)