summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-05-06 03:35:58 +0200
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2020-05-06 18:00:45 +0200
commita1fd83164df0fa9e6d8ded81e8b0d11c3f980427 (patch)
treeff19ba7da16c618dfa90c23fbb2ca77febb37a53
parent7612d9403dbaa6741b28dcf427ecad8fd0f70c30 (diff)
Add AttachmentValidator for NoteValidatorfeatures/attachment_validator
-rw-r--r--lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex73
-rw-r--r--lib/pleroma/web/activity_pub/object_validators/note_validator.ex7
2 files changed, 77 insertions, 3 deletions
diff --git a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex
new file mode 100644
index 000000000..b4f687f74
--- /dev/null
+++ b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex
@@ -0,0 +1,73 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
+ use Ecto.Schema
+
+ alias Pleroma.Web.ActivityPub.ObjectValidators
+ alias Pleroma.Web.ActivityPub.ObjectValidators.Types
+
+ import Ecto.Changeset
+
+ @primary_key false
+
+ embedded_schema do
+ embeds_one(:url, ObjectValidators.AttachmentURLValidator)
+ field(:mediaType, :string)
+ field(:type, :string)
+ field(:name, :string)
+ end
+
+ def cast_and_validate(data) do
+ data
+ |> cast_data()
+ |> validate_data()
+ end
+
+ def cast_data(data) do
+ %__MODULE__{}
+ |> cast(data, __schema__(:fields))
+ end
+
+ def validate_data(data_cng) do
+ data_cng
+ |> validate_inclusion(:type, ["Audio", "Video", "Image", "Document", "Link"])
+ |> validate_format(:mediaType, ~r[.+/.+])
+ |> validate_required([:url])
+ end
+end
+
+defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentURLValidator do
+ use Ecto.Schema
+
+ alias Pleroma.Web.ActivityPub.ObjectValidators.Types
+
+ import Ecto.Changeset
+
+ @primary_key false
+
+ embedded_schema do
+ field(:href, Types.Uri)
+ field(:mediaType, :string)
+ field(:type, :string)
+ end
+
+ def cast_and_validate(data) do
+ data
+ |> cast_data()
+ |> validate_data()
+ end
+
+ def cast_data(data) do
+ %__MODULE__{}
+ |> cast(data, __schema__(:fields))
+ end
+
+ def validate_data(data_cng) do
+ data_cng
+ |> validate_inclusion(:type, ["Audio", "Video", "Image", "Link"])
+ |> validate_format(:mediaType, ~r[.+/.+])
+ |> validate_required([:href])
+ end
+end
diff --git a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex
index 462a5620a..2396257c5 100644
--- a/lib/pleroma/web/activity_pub/object_validators/note_validator.ex
+++ b/lib/pleroma/web/activity_pub/object_validators/note_validator.ex
@@ -5,6 +5,7 @@
defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator do
use Ecto.Schema
+ alias Pleroma.Web.ActivityPub.ObjectValidators
alias Pleroma.Web.ActivityPub.ObjectValidators.Types
import Ecto.Changeset
@@ -29,8 +30,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator do
# TODO: Write type
field(:emoji, :map, default: %{})
field(:sensitive, :boolean, default: false)
- # TODO: Write type
- field(:attachment, {:array, :map}, default: [])
+ embeds_many(:attachment, ObjectValidators.AttachmentValidator)
field(:replies_count, :integer, default: 0)
field(:like_count, :integer, default: 0)
field(:announcement_count, :integer, default: 0)
@@ -53,7 +53,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.NoteValidator do
def cast_data(data) do
%__MODULE__{}
- |> cast(data, __schema__(:fields))
+ |> cast(data, __schema__(:fields) -- [:attachment])
+ |> cast_embed(:attachment)
end
def validate_data(data_cng) do