allow small/center tags in misskeymarkdown (#132)
authorfloatingghost <hannah@coffee-and-dreams.uk>
Mon, 1 Aug 2022 12:46:52 +0000 (12:46 +0000)
committerfloatingghost <hannah@coffee-and-dreams.uk>
Mon, 1 Aug 2022 12:46:52 +0000 (12:46 +0000)
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/132

lib/pleroma/formatter.ex
lib/pleroma/web/common_api/utils.ex
priv/scrubbers/default.ex
test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs

index ad29d21d77d464622c2bf73b0cf775b5d83accab..575bf9b2dcb20d3bc0ded04ea0abdb406cb6d0f1 100644 (file)
@@ -136,7 +136,12 @@ defmodule Pleroma.Formatter do
     HTML.filter_tags(text)
   end
 
-  def html_escape(text, format) when format in ["text/plain", "text/x.misskeymarkdown"] do
+  def html_escape(text, "text/x.misskeymarkdown") do
+    text
+    |> HTML.filter_tags()
+  end
+
+  def html_escape(text, "text/plain") do
     Regex.split(@link_regex, text, include_captures: true)
     |> Enum.map_every(2, fn chunk ->
       {:safe, part} = Phoenix.HTML.html_escape(chunk)
index f5bc3acf553a23ff178934da486c448500eb82a5..826160a23c0c3783ceffaaf184aab8a9380e98f2 100644 (file)
@@ -259,8 +259,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do
   @doc """
   Formatting text to plain text, BBCode, HTML, or Markdown
   """
-  def format_input(text, format, options)
-      when format in ["text/plain", "text/x.misskeymarkdown"] do
+  def format_input(text, "text/plain", options) do
     text
     |> Formatter.html_escape("text/plain")
     |> Formatter.linkify(options)
@@ -284,6 +283,15 @@ defmodule Pleroma.Web.CommonAPI.Utils do
     |> Formatter.linkify(options)
   end
 
+  def format_input(text, "text/x.misskeymarkdown", options) do
+    text
+    |> Formatter.linkify(options)
+    |> Formatter.html_escape("text/x.misskeymarkdown")
+    |> (fn {text, mentions, tags} ->
+          {String.replace(text, ~r/\r?\n/, "<br>"), mentions, tags}
+        end).()
+  end
+
   def format_input(text, "text/markdown", options) do
     text
     |> Formatter.mentions_escape(options)
index 4694a92a53b657f501c6574f7e33fc0f20064daa..478cbde9bef47ad1d5ee06c196aebd7bc64afca2 100644 (file)
@@ -97,5 +97,8 @@ defmodule Pleroma.HTML.Scrubber.Default do
     Meta.allow_tag_with_these_attributes(:font, ["face"])
   end
 
+  Meta.allow_tag_with_these_attributes(:center, [])
+  Meta.allow_tag_with_these_attributes(:small, [])
+
   Meta.strip_everything_not_covered()
 end
index 8b39829168bbd06de32a45dab570aeb5ec0807d6..09cd1a964f55b694ff6dd4c784213284bab68a1d 100644 (file)
@@ -130,18 +130,21 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
         |> Jason.decode!()
 
       expected_content =
-        "<span class=\"h-card\"><a class=\"u-url mention\" data-user=\"#{local_user.id}\" href=\"#{local_user.ap_id}\" rel=\"ugc\">@<span>akkoma_user</span></a></span> linkifylink <a class=\"hashtag\" data-tag=\"dancedance\" href=\"http://localhost:4001/tag/dancedance\" rel=\"tag ugc\">#dancedance</a> $[jelly mfm goes here] <br><br>## aaa"
+        "<span class=\"h-card\"><a class=\"u-url mention\" data-user=\"#{local_user.id}\" href=\"#{local_user.ap_id}\" rel=\"ugc\">@<span>akkoma_user</span></a></span> linkifylink <a class=\"hashtag\" data-tag=\"dancedance\" href=\"http://localhost:4001/tag/dancedance\">#dancedance</a> $[jelly mfm goes here] <br><br>## aaa"
+
+      changes = ArticleNotePageValidator.cast_and_validate(note)
 
       %{
         valid?: true,
         changes: %{
-          content: ^expected_content,
           source: %{
             "content" => "@akkoma_user linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa",
             "mediaType" => "text/x.misskeymarkdown"
           }
         }
-      } = ArticleNotePageValidator.cast_and_validate(note)
+      } = changes
+
+      assert changes.changes[:content] == expected_content
     end
   end
 end