37 lines
966 B
Elixir
37 lines
966 B
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
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({:comment, _text, _children}), do: ""
|
|
|
|
def scrub({tag, attributes, children}), do: {tag, attributes, children}
|
|
def scrub({_tag, children}), do: children
|
|
def scrub(text), do: text
|
|
end
|