diff options
author | Alex Gleason <alex@alexgleason.me> | 2021-05-13 14:03:53 -0500 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2021-05-13 14:03:53 -0500 |
commit | 92eb248581dbbdbac68a240c401f5357b45baf27 (patch) | |
tree | d4fb479ebea715e75d1afb5940ca8cfca80065f3 | |
parent | 72cc7b336954a9af8f7cd3adb6d2f70be4d49e6d (diff) | |
download | pleroma-92eb248581dbbdbac68a240c401f5357b45baf27.tar.gz |
Parser: don't be so strict about validating Embeds (leave it up to the Card)
-rw-r--r-- | lib/pleroma/web/rich_media/parser.ex | 7 | ||||
-rw-r--r-- | test/pleroma/web/rich_media/parser_test.exs | 40 |
2 files changed, 38 insertions, 9 deletions
diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex index 66c90682c..0532e51ad 100644 --- a/lib/pleroma/web/rich_media/parser.ex +++ b/lib/pleroma/web/rich_media/parser.ex @@ -4,7 +4,6 @@ defmodule Pleroma.Web.RichMedia.Parser do require Logger - alias Pleroma.Web.RichMedia.Parser.Card alias Pleroma.Web.RichMedia.Parser.Embed @cachex Pleroma.Config.get([:cachex, :provider], Cachex) @@ -145,8 +144,7 @@ defmodule Pleroma.Web.RichMedia.Parser do {:ok, %Tesla.Env{body: json}} <- Pleroma.Web.RichMedia.Helpers.oembed_get(oembed_url), {:ok, data} <- Jason.decode(json), - embed <- %Embed{url: url, oembed: data}, - {:ok, %Card{}} <- Card.validate(embed) do + embed <- %Embed{url: url, oembed: data} do {:ok, embed} else {:error, error} -> {:error, error} @@ -157,8 +155,7 @@ defmodule Pleroma.Web.RichMedia.Parser do defp fetch_document(url) do with {:ok, %Tesla.Env{body: html}} <- Pleroma.Web.RichMedia.Helpers.rich_media_get(url), {:ok, html} <- Floki.parse_document(html), - %Embed{} = embed <- parse_embed(html, url), - {:ok, %Card{}} <- Card.validate(embed) do + %Embed{} = embed <- parse_embed(html, url) do {:ok, embed} else {:error, error} -> {:error, error} diff --git a/test/pleroma/web/rich_media/parser_test.exs b/test/pleroma/web/rich_media/parser_test.exs index f7d010219..8506953bb 100644 --- a/test/pleroma/web/rich_media/parser_test.exs +++ b/test/pleroma/web/rich_media/parser_test.exs @@ -83,8 +83,15 @@ defmodule Pleroma.Web.RichMedia.ParserTest do :ok end - test "returns error when no metadata present" do - assert {:error, _} = Parser.parse("http://example.com/empty") + test "returns empty embed when no metadata present" do + expected = %Embed{ + meta: %{}, + oembed: nil, + title: nil, + url: "http://example.com/empty" + } + + assert Parser.parse("http://example.com/empty") == {:ok, expected} end test "parses ogp" do @@ -166,8 +173,33 @@ defmodule Pleroma.Web.RichMedia.ParserTest do assert Parser.parse(url) == {:ok, expected} end - test "rejects invalid OGP data" do - assert {:error, _} = Parser.parse("http://example.com/malformed") + test "cleans corrupted meta data" do + expected = %Embed{ + meta: %{ + "Keywords" => "Konsument i zakupy", + "ROBOTS" => "NOARCHIVE", + "fb:app_id" => "515714931781741", + "fb:pages" => "288018984602680", + "google-site-verification" => "3P4BE3hLw82QWqtseIE60qQcOtrpMxMnCNkcv62pjTA", + "news_keywords" => "Konsument i zakupy", + "og:image" => + "https://bi.im-g.pl/im/f7/49/17/z24418295FBW,Prace-nad-projektem-chusty-antysmogowej-rozpoczely.jpg", + "og:locale" => "pl_PL", + "og:site_name" => "wyborcza.biz", + "og:type" => "article", + "og:url" => + "http://wyborcza.biz/biznes/7,147743,24417936,pomysl-na-biznes-chusta-ktora-chroni-przed-smogiem.html", + "twitter:card" => "summary_large_image", + "twitter:image" => + "https://bi.im-g.pl/im/f7/49/17/z24418295FBW,Prace-nad-projektem-chusty-antysmogowej-rozpoczely.jpg", + "viewport" => "width=device-width, user-scalable=yes" + }, + oembed: nil, + title: nil, + url: "http://example.com/malformed" + } + + assert Parser.parse("http://example.com/malformed") == {:ok, expected} end test "returns error if getting page was not successful" do |