aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/rich_media/parser.ex7
-rw-r--r--lib/pleroma/web/rich_media/parser/card.ex20
2 files changed, 18 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/lib/pleroma/web/rich_media/parser/card.ex b/lib/pleroma/web/rich_media/parser/card.ex
index b29db730b..528837614 100644
--- a/lib/pleroma/web/rich_media/parser/card.ex
+++ b/lib/pleroma/web/rich_media/parser/card.ex
@@ -40,8 +40,8 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do
html: sanitize_html(oembed["html"]),
width: oembed["width"],
height: oembed["height"],
- image: get_image(oembed) |> proxy(),
- embed_url: oembed["url"] |> proxy()
+ image: get_image(oembed) |> fix_uri(url) |> proxy(),
+ embed_url: oembed["url"] |> fix_uri(url) |> proxy()
}
|> validate()
end
@@ -56,7 +56,7 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do
type: "link",
provider_name: uri.host,
provider_url: "#{uri.scheme}://#{uri.host}",
- image: get_image(embed) |> proxy()
+ image: get_image(embed) |> fix_uri(url) |> proxy()
}
|> validate()
end
@@ -112,12 +112,24 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do
defp stringify_keys(%{} = map), do: Map.new(map, fn {k, v} -> {Atom.to_string(k), v} end)
+ def fix_uri("http://" <> _ = uri, _base_uri), do: uri
+ def fix_uri("https://" <> _ = uri, _base_uri), do: uri
+ def fix_uri("/" <> _ = uri, base_uri), do: URI.merge(base_uri, uri) |> URI.to_string()
+ def fix_uri("", _base_uri), do: nil
+
+ def fix_uri(uri, base_uri) when is_binary(uri),
+ do: URI.merge(base_uri, "/#{uri}") |> URI.to_string()
+
+ def fix_uri(_uri, _base_uri), do: nil
+
defp proxy(url) when is_binary(url), do: Pleroma.Web.MediaProxy.url(url)
defp proxy(_), do: nil
def validate(%Card{type: type, html: html} = card)
when type in ["video", "rich"] and (is_binary(html) == false or html == "") do
- {:error, {:invalid_metadata, card}}
+ card
+ |> Map.put(:type, "link")
+ |> validate()
end
def validate(%Card{type: type, title: title} = card)