aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex19
-rw-r--r--test/pleroma/web/activity_pub/transmogrifier_test.exs54
2 files changed, 72 insertions, 1 deletions
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index a70330f0e..5750396a4 100644
--- 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
index 335fe1a30..dae07cf21 100644
--- 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