commit: 410e177b2ac3177f0645d7728b2ea922ba3c24d3
parent b613a9ec6b68972c81dfe2f0175572bc7bd547f9
Author: Tusooa Zhu <tusooa@kazv.moe>
Date: Wed, 1 Jun 2022 12:02:03 -0400
Strip internal fields in formerRepresentation
Diffstat:
2 files changed, 72 insertions(+), 1 deletion(-)
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -902,7 +902,24 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
end
def strip_internal_fields(object) do
- Map.drop(object, Pleroma.Constants.object_internal_fields())
+ outer = Map.drop(object, Pleroma.Constants.object_internal_fields())
+
+ case outer do
+ %{"formerRepresentations" => %{"orderedItems" => list}} when is_list(list) ->
+ update_in(
+ outer["formerRepresentations"]["orderedItems"],
+ &Enum.map(
+ &1,
+ fn
+ item when is_map(item) -> Map.drop(item, Pleroma.Constants.object_internal_fields())
+ item -> item
+ end
+ )
+ )
+
+ _ ->
+ outer
+ end
end
defp strip_internal_tags(%{"tag" => tags} = object) do
diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs
@@ -575,4 +575,58 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
assert Transmogrifier.fix_attachments(object) == expected
end
end
+
+ describe "strip_internal_fields/1" do
+ test "it strips internal fields in formerRepresentations" do
+ original = %{
+ "formerRepresentations" => %{
+ "orderedItems" => [
+ %{"generator" => %{}}
+ ]
+ }
+ }
+
+ stripped = Transmogrifier.strip_internal_fields(original)
+
+ refute Map.has_key?(
+ Enum.at(stripped["formerRepresentations"]["orderedItems"], 0),
+ "generator"
+ )
+ end
+
+ test "it strips internal fields in maybe badly-formed formerRepresentations" do
+ original = %{
+ "formerRepresentations" => %{
+ "orderedItems" => [
+ %{"generator" => %{}},
+ "https://example.com/1"
+ ]
+ }
+ }
+
+ stripped = Transmogrifier.strip_internal_fields(original)
+
+ refute Map.has_key?(
+ Enum.at(stripped["formerRepresentations"]["orderedItems"], 0),
+ "generator"
+ )
+
+ assert Enum.at(stripped["formerRepresentations"]["orderedItems"], 1) ==
+ "https://example.com/1"
+ end
+
+ test "it ignores if formerRepresentations does not look like an OrderedCollection" do
+ original = %{
+ "formerRepresentations" => %{
+ "items" => [
+ %{"generator" => %{}}
+ ]
+ }
+ }
+
+ stripped = Transmogrifier.strip_internal_fields(original)
+
+ assert Map.has_key?(Enum.at(stripped["formerRepresentations"]["items"], 0), "generator")
+ end
+ end
end