AttachmentValidator: Use custom ecto type and regex for "mediaType"
This commit is contained in:
parent
4ea9886faa
commit
030183b35f
2 changed files with 43 additions and 9 deletions
|
@ -12,14 +12,14 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
|
||||||
@primary_key false
|
@primary_key false
|
||||||
embedded_schema do
|
embedded_schema do
|
||||||
field(:type, :string)
|
field(:type, :string)
|
||||||
field(:mediaType, :string, default: "application/octet-stream")
|
field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream")
|
||||||
field(:name, :string)
|
field(:name, :string)
|
||||||
field(:blurhash, :string)
|
field(:blurhash, :string)
|
||||||
|
|
||||||
embeds_many :url, UrlObjectValidator, primary_key: false do
|
embeds_many :url, UrlObjectValidator, primary_key: false do
|
||||||
field(:type, :string)
|
field(:type, :string)
|
||||||
field(:href, ObjectValidators.Uri)
|
field(:href, ObjectValidators.Uri)
|
||||||
field(:mediaType, :string, default: "application/octet-stream")
|
field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream")
|
||||||
field(:width, :integer)
|
field(:width, :integer)
|
||||||
field(:height, :integer)
|
field(:height, :integer)
|
||||||
end
|
end
|
||||||
|
@ -59,13 +59,7 @@ def url_changeset(struct, data) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def fix_media_type(data) do
|
def fix_media_type(data) do
|
||||||
data = Map.put_new(data, "mediaType", data["mimeType"])
|
Map.put_new(data, "mediaType", data["mimeType"])
|
||||||
|
|
||||||
if is_bitstring(data["mediaType"]) && MIME.extensions(data["mediaType"]) != [] do
|
|
||||||
data
|
|
||||||
else
|
|
||||||
Map.put(data, "mediaType", "application/octet-stream")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp handle_href(href, mediaType, data) do
|
defp handle_href(href, mediaType, data) do
|
||||||
|
|
|
@ -27,6 +27,46 @@ test "works with honkerific attachments" do
|
||||||
assert attachment.mediaType == "application/octet-stream"
|
assert attachment.mediaType == "application/octet-stream"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "works with an unknown but valid mime type" do
|
||||||
|
attachment = %{
|
||||||
|
"mediaType" => "x-custom/x-type",
|
||||||
|
"type" => "Document",
|
||||||
|
"url" => "https://example.org"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, attachment} =
|
||||||
|
AttachmentValidator.cast_and_validate(attachment)
|
||||||
|
|> Ecto.Changeset.apply_action(:insert)
|
||||||
|
|
||||||
|
assert attachment.mediaType == "x-custom/x-type"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "works with invalid mime types" do
|
||||||
|
attachment = %{
|
||||||
|
"mediaType" => "x-customx-type",
|
||||||
|
"type" => "Document",
|
||||||
|
"url" => "https://example.org"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, attachment} =
|
||||||
|
AttachmentValidator.cast_and_validate(attachment)
|
||||||
|
|> Ecto.Changeset.apply_action(:insert)
|
||||||
|
|
||||||
|
assert attachment.mediaType == "application/octet-stream"
|
||||||
|
|
||||||
|
attachment = %{
|
||||||
|
"mediaType" => "https://example.org",
|
||||||
|
"type" => "Document",
|
||||||
|
"url" => "https://example.org"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, attachment} =
|
||||||
|
AttachmentValidator.cast_and_validate(attachment)
|
||||||
|
|> Ecto.Changeset.apply_action(:insert)
|
||||||
|
|
||||||
|
assert attachment.mediaType == "application/octet-stream"
|
||||||
|
end
|
||||||
|
|
||||||
test "it turns mastodon attachments into our attachments" do
|
test "it turns mastodon attachments into our attachments" do
|
||||||
attachment = %{
|
attachment = %{
|
||||||
"url" =>
|
"url" =>
|
||||||
|
|
Loading…
Reference in a new issue