forked from AkkomaGang/akkoma
Merge branch 'feature/mediaproxy-inline-images' into 'develop'
html: support mediaproxy for inline images Closes #275 See merge request pleroma/pleroma!346
This commit is contained in:
commit
22c366a85f
2 changed files with 48 additions and 3 deletions
|
@ -83,7 +83,10 @@
|
||||||
allow_headings: false,
|
allow_headings: false,
|
||||||
allow_tables: false,
|
allow_tables: false,
|
||||||
allow_fonts: false,
|
allow_fonts: false,
|
||||||
scrub_policy: Pleroma.HTML.Scrubber.Default
|
scrub_policy: [
|
||||||
|
Pleroma.HTML.Transform.MediaProxy,
|
||||||
|
Pleroma.HTML.Scrubber.Default
|
||||||
|
]
|
||||||
|
|
||||||
config :pleroma, :fe,
|
config :pleroma, :fe,
|
||||||
theme: "pleroma-dark",
|
theme: "pleroma-dark",
|
||||||
|
|
|
@ -3,13 +3,24 @@ defmodule Pleroma.HTML do
|
||||||
|
|
||||||
@markup Application.get_env(:pleroma, :markup)
|
@markup Application.get_env(:pleroma, :markup)
|
||||||
|
|
||||||
|
defp get_scrubbers(scrubber) when is_atom(scrubber), do: [scrubber]
|
||||||
|
defp get_scrubbers(scrubbers) when is_list(scrubbers), do: scrubbers
|
||||||
|
defp get_scrubbers(_), do: [Pleroma.HTML.Scrubber.Default]
|
||||||
|
|
||||||
|
def get_scrubbers() do
|
||||||
|
Keyword.get(@markup, :scrub_policy)
|
||||||
|
|> get_scrubbers
|
||||||
|
end
|
||||||
|
|
||||||
def filter_tags(html, scrubber) do
|
def filter_tags(html, scrubber) do
|
||||||
html |> Scrubber.scrub(scrubber)
|
html |> Scrubber.scrub(scrubber)
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter_tags(html) do
|
def filter_tags(html) do
|
||||||
scrubber = Keyword.get(@markup, :scrub_policy)
|
get_scrubbers()
|
||||||
|
|> Enum.reduce(html, fn scrubber, html ->
|
||||||
filter_tags(html, scrubber)
|
filter_tags(html, scrubber)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
def strip_tags(html) do
|
def strip_tags(html) do
|
||||||
|
@ -131,3 +142,34 @@ defmodule Pleroma.HTML.Scrubber.Default do
|
||||||
|
|
||||||
Meta.strip_everything_not_covered()
|
Meta.strip_everything_not_covered()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defmodule Pleroma.HTML.Transform.MediaProxy do
|
||||||
|
@moduledoc "Transforms inline image URIs to use MediaProxy."
|
||||||
|
|
||||||
|
alias Pleroma.Web.MediaProxy
|
||||||
|
|
||||||
|
def before_scrub(html), do: html
|
||||||
|
|
||||||
|
def scrub_attribute("img", {"src", "http" <> target}) do
|
||||||
|
media_url =
|
||||||
|
("http" <> target)
|
||||||
|
|> MediaProxy.url()
|
||||||
|
|
||||||
|
{"src", media_url}
|
||||||
|
end
|
||||||
|
|
||||||
|
def scrub_attribute(tag, attribute), do: attribute
|
||||||
|
|
||||||
|
def scrub({"img", attributes, children}) do
|
||||||
|
attributes =
|
||||||
|
attributes
|
||||||
|
|> Enum.map(fn attr -> scrub_attribute("img", attr) end)
|
||||||
|
|> Enum.reject(&is_nil(&1))
|
||||||
|
|
||||||
|
{"img", attributes, children}
|
||||||
|
end
|
||||||
|
|
||||||
|
def scrub({tag, attributes, children}), do: {tag, attributes, children}
|
||||||
|
def scrub({tag, children}), do: children
|
||||||
|
def scrub(text), do: text
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in a new issue