First
[anni] / priv / scrubbers / media_proxy.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.HTML.Transform.MediaProxy do
6   @moduledoc "Transforms inline image URIs to use MediaProxy."
7
8   alias Pleroma.Web.MediaProxy
9
10   def before_scrub(html), do: html
11
12   def scrub_attribute(:img, {"src", "http" <> target}) do
13     media_url =
14       ("http" <> target)
15       |> MediaProxy.url()
16
17     {"src", media_url}
18   end
19
20   def scrub_attribute(_tag, attribute), do: attribute
21
22   def scrub({:img, attributes, children}) do
23     attributes =
24       attributes
25       |> Enum.map(fn attr -> scrub_attribute(:img, attr) end)
26       |> Enum.reject(&is_nil(&1))
27
28     {:img, attributes, children}
29   end
30
31   def scrub({:comment, _text, _children}), do: ""
32
33   def scrub({tag, attributes, children}), do: {tag, attributes, children}
34   def scrub({_tag, children}), do: children
35   def scrub(text), do: text
36 end