aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/web/mastodon_api/views/status_view.ex8
-rw-r--r--lib/pleroma/web/rich_media/parser/card.ex26
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