html: allow scrubbing policies to be stackable
authorWilliam Pitcock <nenolod@dereferenced.org>
Sun, 16 Sep 2018 02:07:01 +0000 (02:07 +0000)
committerWilliam Pitcock <nenolod@dereferenced.org>
Sun, 16 Sep 2018 02:16:14 +0000 (02:16 +0000)
lib/pleroma/html.ex

index a0c43b82cb3757377602141704a0d6cdcda36f1b..1eb0fdc000c12b514dfd3d26c03e778b73697b42 100644 (file)
@@ -3,13 +3,24 @@ defmodule Pleroma.HTML do
 
   @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
     html |> Scrubber.scrub(scrubber)
   end
 
   def filter_tags(html) do
-    scrubber = Keyword.get(@markup, :scrub_policy)
-    filter_tags(html, scrubber)
+    get_scrubbers()
+    |> Enum.reduce(html, fn scrubber, html ->
+      filter_tags(html, scrubber)
+    end)
   end
 
   def strip_tags(html) do