activitypub: object view: avoid leaking private details
authorWilliam Pitcock <nenolod@dereferenced.org>
Sat, 17 Nov 2018 22:29:08 +0000 (22:29 +0000)
committerWilliam Pitcock <nenolod@dereferenced.org>
Sat, 17 Nov 2018 22:30:53 +0000 (22:30 +0000)
lib/pleroma/web/activity_pub/views/object_view.ex
test/web/activity_pub/views/object_view_test.exs

index 1911ddfb7e18a0958d17efdb3814bf4aee820813..ff664636c581405fe2646b060cbe2120bbdc8405 100644 (file)
@@ -10,7 +10,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectView do
     Map.merge(base, additional)
   end
 
-  def render("object.json", %{object: %Activity{} = activity}) do
+  def render("object.json", %{object: %Activity{data: %{"type" => "Create"}} = activity}) do
     base = Pleroma.Web.ActivityPub.Utils.make_json_ld_header()
     object = Object.normalize(activity.data["object"])
 
@@ -20,4 +20,15 @@ defmodule Pleroma.Web.ActivityPub.ObjectView do
 
     Map.merge(base, additional)
   end
+
+  def render("object.json", %{object: %Activity{} = activity}) do
+    base = Pleroma.Web.ActivityPub.Utils.make_json_ld_header()
+    object = Object.normalize(activity.data["object"])
+
+    additional =
+      Transmogrifier.prepare_object(activity.data)
+      |> Map.put("object", object.data["id"])
+
+    Map.merge(base, additional)
+  end
 end
index 7e08dff5d1551e4a8fed1dc92ffea5b81a4dae48..d144a77fc7981d8cf27169d5ed9589bfe188cc74 100644 (file)
@@ -2,6 +2,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectViewTest do
   use Pleroma.DataCase
   import Pleroma.Factory
 
+  alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.ActivityPub.ObjectView
 
   test "renders a note object" do
@@ -15,4 +16,43 @@ defmodule Pleroma.Web.ActivityPub.ObjectViewTest do
     assert result["type"] == "Note"
     assert result["@context"]
   end
+
+  test "renders a note activity" do
+    note = insert(:note_activity)
+
+    result = ObjectView.render("object.json", %{object: note})
+
+    assert result["id"] == note.data["id"]
+    assert result["to"] == note.data["to"]
+    assert result["object"]["type"] == "Note"
+    assert result["object"]["content"] == note.data["object"]["content"]
+    assert result["type"] == "Create"
+    assert result["@context"]
+  end
+
+  test "renders a like activity" do
+    note = insert(:note_activity)
+    user = insert(:user)
+
+    {:ok, like_activity, _} = CommonAPI.favorite(note.id, user)
+
+    result = ObjectView.render("object.json", %{object: like_activity})
+
+    assert result["id"] == like_activity.data["id"]
+    assert result["object"] == note.data["object"]["id"]
+    assert result["type"] == "Like"
+  end
+
+  test "renders an announce activity" do
+    note = insert(:note_activity)
+    user = insert(:user)
+
+    {:ok, announce_activity, _} = CommonAPI.repeat(note.id, user)
+
+    result = ObjectView.render("object.json", %{object: announce_activity})
+
+    assert result["id"] == announce_activity.data["id"]
+    assert result["object"] == note.data["object"]["id"]
+    assert result["type"] == "Announce"
+  end
 end