diff --git a/lib/pleroma/web/feed/feed_view.ex b/lib/pleroma/web/feed/feed_view.ex
index 9724cc7f9..f8bc94504 100644
--- a/lib/pleroma/web/feed/feed_view.ex
+++ b/lib/pleroma/web/feed/feed_view.ex
@@ -117,10 +117,14 @@ defmodule Pleroma.Web.Feed.FeedView do
end
attachments_html =
- (data["attachment"] || [])
- |> Enum.map(&rss_attachment_preview/1)
- |> Enum.reject(&(&1 == ""))
- |> Enum.join("
")
+ if data["sensitive"] do
+ ""
+ else
+ (data["attachment"] || [])
+ |> Enum.map(&rss_attachment_preview/1)
+ |> Enum.reject(&(&1 == ""))
+ |> Enum.join("
")
+ end
[base_content, attachments_html]
|> Enum.reject(&(&1 == ""))
@@ -223,7 +227,9 @@ defmodule Pleroma.Web.Feed.FeedView do
attachment["name"] || ""
end
- def media_content_xml(attachment) do
+ def media_content_xml(_attachment, true), do: ""
+
+ def media_content_xml(attachment, _sensitive) do
href = escape(attachment_href(attachment) || "")
type = escape(attachment_type(attachment) || "application/octet-stream")
medium = escape(attachment_medium(attachment))
@@ -234,20 +240,17 @@ defmodule Pleroma.Web.Feed.FeedView do
_ -> ""
end
- description_xml =
- case attachment_description(attachment) do
- "" ->
- ""
+ case attachment_description(attachment) do
+ "" ->
+ ~s(\n)
- description ->
- ~s(\n #{escape(description)})
- end
-
- """
-
- nonadult#{description_xml}
-
- """
+ description ->
+ """
+
+ #{escape(description)}
+
+ """
+ end
end
defp attachment_url_data(attachment) do
diff --git a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex
index a8c2aa342..e2708543f 100644
--- a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex
+++ b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex
@@ -23,7 +23,7 @@
<%= unless attachment_previewable?(attachment) do %>
<% end %>
- <%= media_content_xml(attachment) %>
+ <%= media_content_xml(attachment, @data["sensitive"]) %>
<% end %>
<%= if @data["inReplyTo"] do %>
diff --git a/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex b/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex
index 6ae3c5a55..9b857ee5e 100644
--- a/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex
+++ b/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex
@@ -11,7 +11,7 @@
<%= unless attachment_previewable?(attachment) do %>
<% end %>
- <%= media_content_xml(attachment) %>
+ <%= media_content_xml(attachment, @data["sensitive"]) %>
<% end %>
<%= for tag <- Pleroma.Object.hashtags(@object) do %>
diff --git a/test/pleroma/web/feed/feed_view_test.exs b/test/pleroma/web/feed/feed_view_test.exs
index 3ff3b9bae..45ed3c3ff 100644
--- a/test/pleroma/web/feed/feed_view_test.exs
+++ b/test/pleroma/web/feed/feed_view_test.exs
@@ -19,4 +19,28 @@ defmodule Pleroma.Web.Feed.FeedViewTest do
assert FeedView.atom_content_encoded(data) == expected
assert FeedView.rss_content_encoded(data) == expected
end
+
+ test "does not preview or classify sensitive attachments" do
+ attachment = %{
+ "name" => "spoiler",
+ "url" => [%{"href" => "https://example.com/spoiler.png", "mediaType" => "image/png"}]
+ }
+
+ data = %{
+ "attachment" => [attachment],
+ "content" => "content warning",
+ "sensitive" => true
+ }
+
+ assert FeedView.atom_content_encoded(data) == "content warning"
+ assert FeedView.rss_content_encoded(data) == "content warning"
+ assert FeedView.media_content_xml(attachment, true) == ""
+
+ media_content = FeedView.media_content_xml(attachment, false)
+ assert media_content =~ "spoiler"
+ refute media_content =~ "media:rating"
+
+ assert FeedView.media_content_xml(Map.delete(attachment, "name"), false) ==
+ ~s(\n)
+ end
end