diff --git a/lib/pleroma/web/feed/feed_view.ex b/lib/pleroma/web/feed/feed_view.ex
index dcbb8404f..fc29db2b7 100644
--- a/lib/pleroma/web/feed/feed_view.ex
+++ b/lib/pleroma/web/feed/feed_view.ex
@@ -131,7 +131,7 @@ defmodule Pleroma.Web.Feed.FeedView do
end
attachments_html =
- if data["sensitive"] do
+ if sensitive?(data) do
""
else
(data["attachment"] || [])
@@ -181,6 +181,8 @@ defmodule Pleroma.Web.Feed.FeedView do
def activity_context(activity), do: escape(activity.data["context"])
+ def sensitive?(data), do: data["sensitive"] in [true, "true"]
+
def feed_self_url(conn) do
conn
|> Phoenix.Controller.current_url()
@@ -237,15 +239,15 @@ defmodule Pleroma.Web.Feed.FeedView do
end
end
- def attachment_previewable?(attachment) do
- attachment_medium(attachment) in ["image", "video", "audio"]
+ def rss_enclosure_attachment(attachments) do
+ Enum.find(attachments || [], &(not is_nil(attachment_size_positive(&1))))
end
def attachment_description(attachment) do
attachment["name"] || ""
end
- def media_content_xml(_attachment, true), do: ""
+ def media_content_xml(_attachment, sensitive) when sensitive in [true, "true"], do: ""
def media_content_xml(attachment, _sensitive) do
href = escape(attachment_href(attachment) || "")
diff --git a/lib/pleroma/web/templates/feed/feed/_activity.atom.eex b/lib/pleroma/web/templates/feed/feed/_activity.atom.eex
index bc67e12b3..91ef947f7 100644
--- a/lib/pleroma/web/templates/feed/feed/_activity.atom.eex
+++ b/lib/pleroma/web/templates/feed/feed/_activity.atom.eex
@@ -21,7 +21,7 @@
<% end %>
- <%= unless @data["sensitive"] do %>
+ <%= unless sensitive?(@data) do %>
<%= for attachment <- @data["attachment"] || [] do %>
<%= if size = attachment_size_positive(attachment) do %>
" type="<%= escape(attachment_type(attachment) || "application/octet-stream") %>" length="<%= size %>"/>
diff --git a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex
index 393501dad..4d71a45c7 100644
--- a/lib/pleroma/web/templates/feed/feed/_activity.rss.eex
+++ b/lib/pleroma/web/templates/feed/feed/_activity.rss.eex
@@ -18,15 +18,14 @@
<% end %>
<% end %>
- <%= unless @data["sensitive"] do %>
- <%= with [attachment | _] <- @data["attachment"] || [] do %>
- <%= size = attachment_size_positive(attachment) %>
- " type="<%= escape(attachment_type(attachment) || "application/octet-stream") %>" length="<%= size || 0 %>" />
+ <%= unless sensitive?(@data) do %>
+ <%= with attachment when not is_nil(attachment) <- rss_enclosure_attachment(@data["attachment"]) do %>
+ " type="<%= escape(attachment_type(attachment) || "application/octet-stream") %>" length="<%= attachment_size_positive(attachment) %>" />
<% end %>
<% end %>
<%= for attachment <- @data["attachment"] || [] do %>
- <%= media_content_xml(attachment, @data["sensitive"]) %>
+ <%= media_content_xml(attachment, sensitive?(@data)) %>
<% end %>
<%= if @data["inReplyTo"] do %>
diff --git a/lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex b/lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex
index ce5d62de6..44c4806cf 100644
--- a/lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex
+++ b/lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex
@@ -24,7 +24,7 @@
<% end %>
- <%= unless @data["sensitive"] do %>
+ <%= unless sensitive?(@data) do %>
<%= for attachment <- @data["attachment"] || [] do %>
<%= if size = attachment_size_positive(attachment) do %>
" type="<%= escape(attachment_type(attachment) || "application/octet-stream") %>" length="<%= size %>"/>
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 a8796353f..64e4c1d81 100644
--- a/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex
+++ b/lib/pleroma/web/templates/feed/feed/_tag_activity.xml.eex
@@ -6,15 +6,14 @@
<%= activity_description(@data) %>
]]>
- <%= unless @data["sensitive"] do %>
- <%= with [attachment | _] <- @data["attachment"] || [] do %>
- <%= size = attachment_size_positive(attachment) %>
- " type="<%= escape(attachment_type(attachment) || "application/octet-stream") %>" length="<%= size || 0 %>"/>
+ <%= unless sensitive?(@data) do %>
+ <%= with attachment when not is_nil(attachment) <- rss_enclosure_attachment(@data["attachment"]) do %>
+ " type="<%= escape(attachment_type(attachment) || "application/octet-stream") %>" length="<%= attachment_size_positive(attachment) %>"/>
<% end %>
<% end %>
<%= for attachment <- @data["attachment"] || [] do %>
- <%= media_content_xml(attachment, @data["sensitive"]) %>
+ <%= media_content_xml(attachment, sensitive?(@data)) %>
<% 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 45ed3c3ff..786b6df07 100644
--- a/test/pleroma/web/feed/feed_view_test.exs
+++ b/test/pleroma/web/feed/feed_view_test.exs
@@ -35,6 +35,7 @@ defmodule Pleroma.Web.Feed.FeedViewTest do
assert FeedView.atom_content_encoded(data) == "content warning"
assert FeedView.rss_content_encoded(data) == "content warning"
assert FeedView.media_content_xml(attachment, true) == ""
+ assert FeedView.media_content_xml(attachment, "true") == ""
media_content = FeedView.media_content_xml(attachment, false)
assert media_content =~ "spoiler"
@@ -43,4 +44,16 @@ defmodule Pleroma.Web.Feed.FeedViewTest do
assert FeedView.media_content_xml(Map.delete(attachment, "name"), false) ==
~s(\n)
end
+
+ test "does not treat a legacy false string as sensitive" do
+ data = %{
+ "attachment" => [
+ %{"url" => [%{"href" => "https://example.com/image.png", "mediaType" => "image/png"}]}
+ ],
+ "content" => "visible",
+ "sensitive" => "false"
+ }
+
+ assert FeedView.atom_content_encoded(data) =~ "
response(200)
|> parse()
- assert xpath(rss_xml, ~x"//item/enclosure/@url"sl) == ["https://example.com/file.bin"]
- assert xpath(rss_xml, ~x"//item/enclosure/@type"sl) == ["application/octet-stream"]
- assert xpath(rss_xml, ~x"//item/enclosure/@length"sl) == ["0"]
+ assert xpath(rss_xml, ~x"//item/enclosure/@url"sl) == []
+ assert xpath(rss_xml, ~x"//item/media:content/@url"sl) == ["https://example.com/file.bin"]
+
+ assert xpath(rss_xml, ~x"//item/media:content/@type"sl) == [
+ "application/octet-stream"
+ ]
end
test "returns 404 for a missing feed", %{conn: conn} do