summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2021-05-13 14:03:53 -0500
committerAlex Gleason <alex@alexgleason.me>2021-05-13 14:03:53 -0500
commit92eb248581dbbdbac68a240c401f5357b45baf27 (patch)
treed4fb479ebea715e75d1afb5940ca8cfca80065f3
parent72cc7b336954a9af8f7cd3adb6d2f70be4d49e6d (diff)
Parser: don't be so strict about validating Embeds (leave it up to the Card)
-rw-r--r--lib/pleroma/web/rich_media/parser.ex7
-rw-r--r--test/pleroma/web/rich_media/parser_test.exs40
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