just drop unknown tags
authorFloatingGhost <hannah@coffee-and-dreams.uk>
Fri, 7 Jan 2022 20:14:04 +0000 (20:14 +0000)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Fri, 7 Jan 2022 20:14:04 +0000 (20:14 +0000)
lib/pleroma/web/activity_pub/object_validators/tag_validator.ex
test/fixtures/bookwyrm-article.json
test/pleroma/web/activity_pub/object_validators/tag_validator_test.exs

index dd1bc53ed93a901df112d7f5cac46c4ca0e53444..e7a7c1fc258bfb7ee35a95105d05534fed9c419c 100644 (file)
@@ -68,51 +68,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.TagValidator do
     |> validate_required([:type, :name, :icon])
   end
 
-  def changeset(struct, %{"type" => "Book"} = 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" => "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
-
+  def changeset(struct, %{"type" => _} = data) do
     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])
+    |> cast(data, [])
+    |> Map.put(:action, :ignore)
   end
 
   def icon_changeset(struct, data) do
index 66b34b688bd84e5fb3037edaafaa1fd9ae268766..d0f520ec3018ed2d21c952a8378c1fea72aaa15e 100644 (file)
@@ -26,7 +26,7 @@
     "type": "OrderedCollection"
   },
   "sensitive": false,
-  "tag": [],
+  "tag": [{"type": "Edition"}],
   "to": [
     "https://www.w3.org/ns/activitystreams#Public"
   ],
index bca7a32b998a0a44e8adeb96c075de40be59eacc..443dd308d0db12702208697402125e1febccbab3 100644 (file)
@@ -7,106 +7,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.TagValidatorTest do
 
   alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator
 
-  test "it validates an Edition" do
+  test "it doesn't error on unusual objects" do
     edition = %{
       "@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",
       "work" => "https://bookwyrm.com/book/9"
     }
 
-    assert %{valid?: true, changes: %{name: "Piranesi"}} = 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)
+    assert %{valid?: true, action: :ignore} = TagValidator.cast_and_validate(edition)
   end
 end