Provide plaintext representations of content/cw in MastoAPI
authorrinpatch <rinpatch@sdf.org>
Sun, 1 Jan 2017 00:10:08 +0000 (03:10 +0300)
committerrinpatch <rinpatch@sdf.org>
Sun, 1 Jan 2017 00:10:08 +0000 (03:10 +0300)
docs/api/differences_in_mastoapi_responses.md
lib/pleroma/web/mastodon_api/views/status_view.ex
test/web/mastodon_api/status_view_test.exs

index 215f43155298abb76e8a2a42aa57749a835c4ab1..923d94db236af00945a50b66d8805841feba5a72 100644 (file)
@@ -20,6 +20,8 @@ Has these additional fields under the `pleroma` object:
 
 - `local`: true if the post was made on the local instance.
 - `conversation_id`: the ID of the conversation the status is associated with (if any)
+- `content`: a map consisting of alternate representations of the `content` property with the key being it's mimetype. Currently the only alternate representation supported is `text/plain`
+- `spoiler_text`: a map consisting of alternate representations of the `spoiler_text` property with the key being it's mimetype. Currently the only alternate representation supported is `text/plain`
 
 ## Attachments
 
index 4c0b53bddfd20f21b21feb9ba0e6bc78cea0feb3..d4a8e4fffcfe1791da2db6cca4979d703f21d33a 100644 (file)
@@ -147,20 +147,39 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
     content =
       object
       |> render_content()
+
+    content_html =
+      content
       |> HTML.get_cached_scrubbed_html_for_activity(
         User.html_filter_policy(opts[:for]),
         activity,
         "mastoapi:content"
       )
 
-    summary =
-      (object["summary"] || "")
+    content_plaintext =
+      content
+      |> HTML.get_cached_stripped_html_for_activity(
+        activity,
+        "mastoapi:content"
+      )
+
+    summary = object["summary"] || ""
+
+    summary_html =
+      summary
       |> HTML.get_cached_scrubbed_html_for_activity(
         User.html_filter_policy(opts[:for]),
         activity,
         "mastoapi:summary"
       )
 
+    summary_plaintext =
+      summary
+      |> HTML.get_cached_stripped_html_for_activity(
+        activity,
+        "mastoapi:summary"
+      )
+
     card = render("card.json", Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity))
 
     url =
@@ -179,7 +198,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       in_reply_to_account_id: reply_to_user && to_string(reply_to_user.id),
       reblog: nil,
       card: card,
-      content: content,
+      content: content_html,
       created_at: created_at,
       reblogs_count: announcement_count,
       replies_count: object["repliesCount"] || 0,
@@ -190,7 +209,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       muted: CommonAPI.thread_muted?(user, activity) || User.mutes?(opts[:for], user),
       pinned: pinned?(activity, user),
       sensitive: sensitive,
-      spoiler_text: summary,
+      spoiler_text: summary_html,
       visibility: get_visibility(object),
       media_attachments: attachments,
       mentions: mentions,
@@ -203,7 +222,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       emojis: build_emojis(activity.data["object"]["emoji"]),
       pleroma: %{
         local: activity.local,
-        conversation_id: get_context_id(activity)
+        conversation_id: get_context_id(activity),
+        content: %{"text/plain" => content_plaintext},
+        spoiler_text: %{"text/plain" => summary_plaintext}
       }
     }
   end
index 8db92ac160fd43efe0d8cf138d3115eb81eb7db4..db2fdc2f6dda92a15df7e0f3020ee301f5c387fe 100644 (file)
@@ -101,7 +101,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
       muted: false,
       pinned: false,
       sensitive: false,
-      spoiler_text: note.data["object"]["summary"],
+      spoiler_text: HtmlSanitizeEx.basic_html(note.data["object"]["summary"]),
       visibility: "public",
       media_attachments: [],
       mentions: [],
@@ -126,7 +126,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
       ],
       pleroma: %{
         local: true,
-        conversation_id: convo_id
+        conversation_id: convo_id,
+        content: %{"text/plain" => HtmlSanitizeEx.strip_tags(note.data["object"]["content"])},
+        spoiler_text: %{"text/plain" => HtmlSanitizeEx.strip_tags(note.data["object"]["summary"])}
       }
     }