forked from mirrors/akkoma
AttachmentValidator: directly embed url schema and pass it fix_media_type
This commit is contained in:
parent
1b3d5956b1
commit
f18178cb09
2 changed files with 19 additions and 26 deletions
|
@ -5,6 +5,7 @@
|
||||||
defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
|
defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
|
||||||
use Ecto.Schema
|
use Ecto.Schema
|
||||||
|
|
||||||
|
alias Pleroma.EctoType.ActivityPub.ObjectValidators
|
||||||
alias Pleroma.Web.ActivityPub.ObjectValidators.UrlObjectValidator
|
alias Pleroma.Web.ActivityPub.ObjectValidators.UrlObjectValidator
|
||||||
|
|
||||||
import Ecto.Changeset
|
import Ecto.Changeset
|
||||||
|
@ -15,7 +16,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
|
||||||
field(:mediaType, :string, default: "application/octet-stream")
|
field(:mediaType, :string, default: "application/octet-stream")
|
||||||
field(:name, :string)
|
field(:name, :string)
|
||||||
|
|
||||||
embeds_many(:url, UrlObjectValidator)
|
embeds_many :url, UrlObjectValidator, primary_key: false do
|
||||||
|
field(:type, :string)
|
||||||
|
field(:href, ObjectValidators.Uri)
|
||||||
|
field(:mediaType, :string, default: "application/octet-stream")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def cast_and_validate(data) do
|
def cast_and_validate(data) do
|
||||||
|
@ -37,7 +42,18 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|> cast(data, [:type, :mediaType, :name])
|
|> cast(data, [:type, :mediaType, :name])
|
||||||
|> cast_embed(:url, required: true)
|
|> cast_embed(:url, with: &url_changeset/2)
|
||||||
|
|> validate_inclusion(:type, ~w[Link Document Audio Image Video])
|
||||||
|
|> validate_required([:type, :mediaType, :url])
|
||||||
|
end
|
||||||
|
|
||||||
|
def url_changeset(struct, data) do
|
||||||
|
data = fix_media_type(data)
|
||||||
|
|
||||||
|
struct
|
||||||
|
|> cast(data, [:type, :href, :mediaType])
|
||||||
|
|> validate_inclusion(:type, ["Link"])
|
||||||
|
|> validate_required([:type, :href, :mediaType])
|
||||||
end
|
end
|
||||||
|
|
||||||
def fix_media_type(data) do
|
def fix_media_type(data) do
|
||||||
|
@ -75,6 +91,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
|
||||||
|
|
||||||
def validate_data(cng) do
|
def validate_data(cng) do
|
||||||
cng
|
cng
|
||||||
|
|> validate_inclusion(:type, ~w[Document Audio Image Video])
|
||||||
|> validate_required([:mediaType, :url, :type])
|
|> validate_required([:mediaType, :url, :type])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
# 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.UrlObjectValidator do
|
|
||||||
use Ecto.Schema
|
|
||||||
|
|
||||||
alias Pleroma.EctoType.ActivityPub.ObjectValidators
|
|
||||||
|
|
||||||
import Ecto.Changeset
|
|
||||||
@primary_key false
|
|
||||||
|
|
||||||
embedded_schema do
|
|
||||||
field(:type, :string)
|
|
||||||
field(:href, ObjectValidators.Uri)
|
|
||||||
field(:mediaType, :string, default: "application/octet-stream")
|
|
||||||
end
|
|
||||||
|
|
||||||
def changeset(struct, data) do
|
|
||||||
struct
|
|
||||||
|> cast(data, __schema__(:fields))
|
|
||||||
|> validate_required([:type, :href, :mediaType])
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue