just drop unknown tags

This commit is contained in:
FloatingGhost 2022-01-07 20:14:04 +00:00
parent 2cc6b1e1bd
commit 25b4395830
3 changed files with 6 additions and 140 deletions

View file

@ -68,51 +68,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.TagValidator do
|> validate_required([:type, :name, :icon]) |> validate_required([:type, :name, :icon])
end end
def changeset(struct, %{"type" => "Book"} = data) do def changeset(struct, %{"type" => _} = data) do
data =
if Map.has_key?(data, "title") do
Map.put(data, "name", data["title"])
else
data
end
struct struct
|> cast(data, [:type, :name]) |> cast(data, [])
|> validate_required([:type, :name]) |> Map.put(:action, :ignore)
end
def changeset(struct, %{"type" => "Edition"} = data) do
# Sometimes it's title, sometimes name
# Don't ask me.
data =
if Map.has_key?(data, "title") do
Map.put(data, "name", data["title"])
else
data
end
struct
|> cast(data, [:type, :name])
|> validate_required([:type, :name])
end
def changeset(struct, %{"type" => "Work"} = data) do
data =
if Map.has_key?(data, "title") do
Map.put(data, "name", data["title"])
else
data
end
struct
|> cast(data, [:type, :name])
|> validate_required([:type, :name])
end
def changeset(struct, %{"type" => "Author"} = data) do
struct
|> cast(data, [:type, :name])
|> validate_required([:type, :name])
end end
def icon_changeset(struct, data) do def icon_changeset(struct, data) do

View file

@ -26,7 +26,7 @@
"type": "OrderedCollection" "type": "OrderedCollection"
}, },
"sensitive": false, "sensitive": false,
"tag": [], "tag": [{"type": "Edition"}],
"to": [ "to": [
"https://www.w3.org/ns/activitystreams#Public" "https://www.w3.org/ns/activitystreams#Public"
], ],

View file

@ -7,106 +7,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.TagValidatorTest do
alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator
test "it validates an Edition" do test "it doesn't error on unusual objects" do
edition = %{ edition = %{
"@context" => "https://www.w3.org/ns/activitystreams", "@context" => "https://www.w3.org/ns/activitystreams",
"asin" => "",
"authors" => ["https://bookwyrm.com/author/3"],
"cover" => %{
"@context" => "https://www.w3.org/ns/activitystreams",
"name" => "Piranesi (2020, Bloomsbury Publishing)",
"type" => "Document",
"url" => "https://bookwyrm.com/images/covers/9fd28af7-ebb8-4df3-80c8-28488fc5349f.jpeg"
},
"description" => "",
"editionRank" => 7,
"firstPublishedDate" => "",
"goodreadsKey" => "",
"id" => "https://bookwyrm.com/book/10",
"isbn10" => "163557563X",
"isbn13" => "9781635575637",
"languages" => ["English"],
"librarythingKey" => "",
"oclcNumber" => "",
"openlibraryKey" => "OL28300471M",
"pages" => 272,
"physicalFormat" => "",
"physicalFormatDetail" => "hardcover",
"publishedDate" => "2020-09-15T00:00:00+00:00",
"publishers" => ["Bloomsbury Publishing"],
"series" => "",
"seriesNumber" => "",
"sortTitle" => "",
"subjectPlaces" => [],
"subjects" => [],
"subtitle" => "",
"title" => "Piranesi",
"type" => "Edition", "type" => "Edition",
"work" => "https://bookwyrm.com/book/9" "work" => "https://bookwyrm.com/book/9"
} }
assert %{valid?: true, changes: %{name: "Piranesi"}} = TagValidator.cast_and_validate(edition) assert %{valid?: true, action: :ignore} = TagValidator.cast_and_validate(edition)
end
test "it should validate an author" do
author = %{
"@context" => "https://www.w3.org/ns/activitystreams",
"aliases" => [],
"bio" => "snipped",
"bnfId" => "14603397h",
"born" => "1959-11-01T00:00:00+00:00",
"goodreadsKey" => "",
"id" => "https://bookwyrm.com/author/3",
"isni" => "0000 0001 0877 1086",
"librarythingKey" => "",
"name" => "Susanna Clarke",
"openlibraryKey" => "OL1387961A",
"type" => "Author",
"viafId" => "19931023",
"wikipediaLink" => ""
}
assert %{valid?: true, changes: %{name: "Susanna Clarke"}} =
TagValidator.cast_and_validate(author)
end
test "it should validate a work" do
work = %{
"@context" => "https://www.w3.org/ns/activitystreams",
"authors" => ["https://bookwyrm.com/author/3"],
"cover" => %{
"@context" => "https://www.w3.org/ns/activitystreams",
"name" => "Piranesi",
"type" => "Document",
"url" => "https://bookwyrm.com/images/covers/e950ac10-feaf-4c3e-b2d3-de20d3a28329.jpeg"
},
"description" => "snipped",
"editions" => [
"https://bookwyrm.com/book/12",
"https://bookwyrm.com/book/10",
"https://bookwyrm.com/book/14",
"https://bookwyrm.com/book/13",
"https://bookwyrm.com/book/11",
"https://bookwyrm.com/book/15"
],
"firstPublishedDate" => "",
"goodreadsKey" => "",
"id" => "https://bookwyrm.com/book/9",
"languages" => [],
"lccn" => "",
"librarythingKey" => "",
"openlibraryKey" => "OL20893680W",
"publishedDate" => "",
"series" => "",
"seriesNumber" => "",
"sortTitle" => "",
"subjectPlaces" => [],
"subjects" => ["English literature"],
"subtitle" => "",
"title" => "Piranesi",
"type" => "Work"
}
assert %{valid?: true, changes: %{name: "Piranesi"}} = TagValidator.cast_and_validate(work)
end end
end end