diff options
-rw-r--r-- | lib/pleroma/web/mastodon_api/views/status_view.ex | 8 | ||||
-rw-r--r-- | lib/pleroma/web/rich_media/parser/card.ex | 26 |
2 files changed, 16 insertions, 18 deletions
diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index ecf81b65d..427476695 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -370,9 +370,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do end def render("card.json", %Embed{url: _, meta: _} = embed) do - embed - |> Card.parse() - |> Card.to_map() + with {:ok, %Card{} = card} <- Card.parse(embed) do + Card.to_map(card) + else + _ -> nil + end end def render("card.json", %Card{} = card), do: Card.to_map(card) diff --git a/lib/pleroma/web/rich_media/parser/card.ex b/lib/pleroma/web/rich_media/parser/card.ex index 399b41195..2e06aa562 100644 --- a/lib/pleroma/web/rich_media/parser/card.ex +++ b/lib/pleroma/web/rich_media/parser/card.ex @@ -41,32 +41,28 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do image: oembed["thumbnail_url"] |> proxy(), embed_url: oembed["url"] |> proxy() } + |> validate() end def parse(%{url: url} = embed) do - title = get_title(embed) - - if is_binary(title) do - %Card{ - url: url, - title: title, - description: get_description(embed), - type: "link", - image: get_image(embed) |> proxy() - } - else - nil - end + %Card{ + url: url, + title: get_title(embed), + description: get_description(embed), + type: "link", + image: get_image(embed) |> proxy() + } + |> validate() end - def parse(_), do: nil + def parse(card), do: {:error, {:invalid_metadata, card}} defp get_title(embed) do case embed do %{meta: %{"twitter:title" => title}} when is_binary(title) and title != "" -> title %{meta: %{"og:title" => title}} when is_binary(title) and title != "" -> title %{title: title} when is_binary(title) and title != "" -> title - _ -> "" + _ -> nil end end |