fix(feed): hide sensitive media previews
This commit is contained in:
parent
a9bf7212d4
commit
85a802282e
4 changed files with 47 additions and 20 deletions
|
|
@ -117,10 +117,14 @@ defmodule Pleroma.Web.Feed.FeedView do
|
||||||
end
|
end
|
||||||
|
|
||||||
attachments_html =
|
attachments_html =
|
||||||
(data["attachment"] || [])
|
if data["sensitive"] do
|
||||||
|> Enum.map(&rss_attachment_preview/1)
|
""
|
||||||
|> Enum.reject(&(&1 == ""))
|
else
|
||||||
|> Enum.join("<br/><br/>")
|
(data["attachment"] || [])
|
||||||
|
|> Enum.map(&rss_attachment_preview/1)
|
||||||
|
|> Enum.reject(&(&1 == ""))
|
||||||
|
|> Enum.join("<br/><br/>")
|
||||||
|
end
|
||||||
|
|
||||||
[base_content, attachments_html]
|
[base_content, attachments_html]
|
||||||
|> Enum.reject(&(&1 == ""))
|
|> Enum.reject(&(&1 == ""))
|
||||||
|
|
@ -223,7 +227,9 @@ defmodule Pleroma.Web.Feed.FeedView do
|
||||||
attachment["name"] || ""
|
attachment["name"] || ""
|
||||||
end
|
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) || "")
|
href = escape(attachment_href(attachment) || "")
|
||||||
type = escape(attachment_type(attachment) || "application/octet-stream")
|
type = escape(attachment_type(attachment) || "application/octet-stream")
|
||||||
medium = escape(attachment_medium(attachment))
|
medium = escape(attachment_medium(attachment))
|
||||||
|
|
@ -234,20 +240,17 @@ defmodule Pleroma.Web.Feed.FeedView do
|
||||||
_ -> ""
|
_ -> ""
|
||||||
end
|
end
|
||||||
|
|
||||||
description_xml =
|
case attachment_description(attachment) do
|
||||||
case attachment_description(attachment) do
|
"" ->
|
||||||
"" ->
|
~s(<media:content url="#{href}" type="#{type}"#{file_size_attr} medium="#{medium}"/>\n)
|
||||||
""
|
|
||||||
|
|
||||||
description ->
|
description ->
|
||||||
~s(\n <media:description type="plain">#{escape(description)}</media:description>)
|
"""
|
||||||
end
|
<media:content url="#{href}" type="#{type}"#{file_size_attr} medium="#{medium}">
|
||||||
|
<media:description type="plain">#{escape(description)}</media:description>
|
||||||
"""
|
</media:content>
|
||||||
<media:content url="#{href}" type="#{type}"#{file_size_attr} medium="#{medium}">
|
"""
|
||||||
<media:rating scheme="urn:simple">nonadult</media:rating>#{description_xml}
|
end
|
||||||
</media:content>
|
|
||||||
"""
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp attachment_url_data(attachment) do
|
defp attachment_url_data(attachment) do
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
<%= unless attachment_previewable?(attachment) do %>
|
<%= unless attachment_previewable?(attachment) do %>
|
||||||
<enclosure url="<%= attachment_href(attachment) %>" type="<%= attachment_type(attachment) %>" length="<%= size || 0 %>" />
|
<enclosure url="<%= attachment_href(attachment) %>" type="<%= attachment_type(attachment) %>" length="<%= size || 0 %>" />
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= media_content_xml(attachment) %>
|
<%= media_content_xml(attachment, @data["sensitive"]) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= if @data["inReplyTo"] do %>
|
<%= if @data["inReplyTo"] do %>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<%= unless attachment_previewable?(attachment) do %>
|
<%= unless attachment_previewable?(attachment) do %>
|
||||||
<enclosure url="<%= attachment_href(attachment) %>" type="<%= attachment_type(attachment) %>" length="<%= size || 0 %>"/>
|
<enclosure url="<%= attachment_href(attachment) %>" type="<%= attachment_type(attachment) %>" length="<%= size || 0 %>"/>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= media_content_xml(attachment) %>
|
<%= media_content_xml(attachment, @data["sensitive"]) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= for tag <- Pleroma.Object.hashtags(@object) do %>
|
<%= for tag <- Pleroma.Object.hashtags(@object) do %>
|
||||||
|
|
|
||||||
|
|
@ -19,4 +19,28 @@ defmodule Pleroma.Web.Feed.FeedViewTest do
|
||||||
assert FeedView.atom_content_encoded(data) == expected
|
assert FeedView.atom_content_encoded(data) == expected
|
||||||
assert FeedView.rss_content_encoded(data) == expected
|
assert FeedView.rss_content_encoded(data) == expected
|
||||||
end
|
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 =~ "<media:description type=\"plain\">spoiler</media:description>"
|
||||||
|
refute media_content =~ "media:rating"
|
||||||
|
|
||||||
|
assert FeedView.media_content_xml(Map.delete(attachment, "name"), false) ==
|
||||||
|
~s(<media:content url="https://example.com/spoiler.png" type="image/png" medium="image"/>\n)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue