Refactor Earmark code, fix tests
authorAlex Gleason <alex@alexgleason.me>
Tue, 13 Oct 2020 19:27:50 +0000 (14:27 -0500)
committerMark Felder <feld@FreeBSD.org>
Fri, 11 Dec 2020 23:22:42 +0000 (17:22 -0600)
lib/pleroma/formatter.ex
lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex
lib/pleroma/web/common_api/utils.ex
priv/scrubbers/default.ex
test/pleroma/web/common_api/utils_test.exs
test/pleroma/web/common_api_test.exs

index 61906dda6aa406c79a30ebb8de060c3fa8a57fbb..1be12055f2954b333ce16a913703b70ef9d4bf17 100644 (file)
@@ -121,6 +121,10 @@ defmodule Pleroma.Formatter do
     end
   end
 
+  def markdown_to_html(text) do
+    Earmark.as_html!(text)
+  end
+
   def html_escape({text, mentions, hashtags}, type) do
     {html_escape(text, type), mentions, hashtags}
   end
index eaf94797af12c48c215c7128a4160a5e788c9ac3..9b38aa4c244f8f2fc7d6175f8becb9c5044fc513 100644 (file)
@@ -95,7 +95,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator do
        when is_binary(content) do
     content =
       content
-      |> Earmark.as_html!()
+      |> Pleroma.Formatter.markdown_to_html()
       |> Pleroma.HTML.filter_tags()
 
     Map.put(data, "content", content)
index b434a069ed2f8dd1d48d5624610ffb5e001ec11f..be86009af1d3f82c22b09f7619e37bacca021d53 100644 (file)
@@ -294,7 +294,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do
   def format_input(text, "text/markdown", options) do
     text
     |> Formatter.mentions_escape(options)
-    |> Earmark.as_html!()
+    |> Formatter.markdown_to_html()
     |> Formatter.linkify(options)
     |> Formatter.minify("text/html")
     |> Formatter.html_escape("text/html")
index 0893b17e50d393de0d662044250bd87e4db3a2b5..4694a92a53b657f501c6574f7e33fc0f20064daa 100644 (file)
@@ -59,6 +59,8 @@ defmodule Pleroma.HTML.Scrubber.Default do
   Meta.allow_tag_with_this_attribute_values(:span, "class", ["h-card"])
   Meta.allow_tag_with_these_attributes(:span, [])
 
+  Meta.allow_tag_with_this_attribute_values(:code, "class", ["inline"])
+
   @allow_inline_images Pleroma.Config.get([:markup, :allow_inline_images])
 
   if @allow_inline_images do
index c6abbbe84a838d4eeebc03f069d734ea5a4ee998..ab6392b1f5fb835d93f94c69edb86cfe62bcb3dc 100644 (file)
@@ -178,13 +178,13 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do
     test "raw HTML" do
       code = ~s[<a href="http://example.org/">OwO</a><!-- what's this?-->]
       {result, [], []} = Utils.format_input(code, "text/markdown")
-      assert result == "<p>#{code}</p>"
+      assert result == ~s[<a href="http://example.org/">OwO</a>]
     end
 
     test "rulers" do
       code = ~s[before\n\n-----\n\nafter]
       {result, [], []} = Utils.format_input(code, "text/markdown")
-      assert result == "<p>before</p><hr /><p>after</p>"
+      assert result == "<p>before</p><hr/><p>after</p>"
     end
 
     test "blockquote" do
@@ -204,7 +204,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do
 
       code = ~s[```\nputs "Hello World"\n```]
       {result, [], []} = Utils.format_input(code, "text/markdown")
-      assert result == ~s[<pre><code class="">puts &quot;Hello World&quot;</code></pre>]
+      assert result == ~s[<pre><code>puts &quot;Hello World&quot;</code></pre>]
     end
 
     test "lists" do
@@ -227,9 +227,9 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do
       assert result == ~s[<p><strong>aaaa~</strong></p>]
 
       # strikethrough
-      code = ~s[<del>aaaa~</del>]
+      code = ~s[~~aaaa~~~]
       {result, [], []} = Utils.format_input(code, "text/markdown")
-      assert result == ~s[<p><del>aaaa~</del></p>]
+      assert result == ~s[<p><del>aaaa</del>~</p>]
     end
   end
 
index 585b2c174c9564c4aa2ccb408c7847f39374b671..c1b1af07321e25874c58c52ec6bc2ecb8476c7f7 100644 (file)
@@ -558,7 +558,7 @@ defmodule Pleroma.Web.CommonAPITest do
 
       object = Object.normalize(activity)
 
-      assert object.data["content"] == "<p><b>2hu</b></p>alert(&#39;xss&#39;)"
+      assert object.data["content"] == "<p><b>2hu</b></p>"
       assert object.data["source"] == post
     end