Store status data inside Flag activity
authorMaxim Filippov <colixer@gmail.com>
Wed, 23 Oct 2019 19:27:22 +0000 (21:27 +0200)
committerMaxim Filippov <colixer@gmail.com>
Wed, 23 Oct 2019 19:27:22 +0000 (21:27 +0200)
lib/pleroma/web/activity_pub/utils.ex
lib/pleroma/web/admin_api/report.ex
test/web/activity_pub/activity_pub_test.exs
test/web/activity_pub/transmogrifier_test.exs
test/web/activity_pub/utils_test.exs
test/web/common_api/common_api_test.exs

index 57982eb4adcf5ffa04c8bcb2cc17c8e66240e441..c58ee74823802f6e801daa99e297c4befe62dc55 100644 (file)
@@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do
   alias Pleroma.User
   alias Pleroma.Web
   alias Pleroma.Web.ActivityPub.Visibility
+  alias Pleroma.Web.AdminAPI.AccountView
   alias Pleroma.Web.Endpoint
   alias Pleroma.Web.Router.Helpers
 
@@ -608,34 +609,24 @@ defmodule Pleroma.Web.ActivityPub.Utils do
 
   defp build_flag_object(%{account: account, statuses: statuses} = _) do
     [account.ap_id] ++
-      Enum.map(statuses || [], fn
-        %Activity{} = act ->
-          obj = Object.get_by_ap_id(act.data["object"])
-
-          %{
-            "type" => "Note",
-            "id" => act.data["id"],
-            "content" => obj.data["content"]
-          }
-
-        act when is_map(act) ->
-          obj = Object.get_by_ap_id(act["object"])
-
-          %{
-            "type" => "Note",
-            "id" => act["id"],
-            "content" => obj.data["content"]
-          }
-
-        act
-        when is_binary(act) ->
-          activity = Activity.get_by_ap_id_with_object(act)
-
-          %{
-            "type" => "Note",
-            "id" => activity.data["id"],
-            "content" => activity.data["object"]["content"]
-          }
+      Enum.map(statuses || [], fn act ->
+        id =
+          case act do
+            %Activity{} = act -> act.data["id"]
+            act when is_map(act) -> act["id"]
+            act when is_binary(act) -> act
+          end
+
+        activity = Activity.get_by_ap_id_with_object(id)
+        actor = User.get_by_ap_id(activity.object.data["actor"])
+
+        %{
+          "type" => "Note",
+          "id" => activity.data["id"],
+          "content" => activity.object.data["content"],
+          "published" => activity.object.data["published"],
+          "actor" => AccountView.render("show.json", %{user: actor})
+        }
       end)
   end
 
index c751dc2be2b96e635e357eceb7f61162526f56ce..ccd56e15e8c787b41dd19902cd9149c4a22ba3ab 100644 (file)
@@ -13,8 +13,8 @@ defmodule Pleroma.Web.AdminAPI.Report do
     account = User.get_cached_by_ap_id(account_ap_id)
 
     statuses =
-      Enum.map(status_ap_ids, fn ap_id ->
-        Activity.get_by_ap_id_with_object(ap_id)
+      Enum.map(status_ap_ids, fn act ->
+        Activity.get_by_ap_id_with_object(act["id"])
       end)
 
     %{report: report, user: user, account: account, statuses: statuses}
index 3a5a2f9840a4674ef51560e19c11875c5d656df6..cbd81b69845a3dd74be15e7ea54f5a065570edb0 100644 (file)
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
   alias Pleroma.User
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.ActivityPub.Utils
+  alias Pleroma.Web.AdminAPI.AccountView
   alias Pleroma.Web.CommonAPI
 
   import Pleroma.Factory
@@ -1265,6 +1266,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
     target_ap_id = target_account.ap_id
     activity_ap_id = activity.data["id"]
 
+    activity_with_object = Activity.get_by_ap_id_with_object(activity_ap_id)
+
     assert {:ok, activity} =
              ActivityPub.flag(%{
                actor: reporter,
@@ -1274,13 +1277,21 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
                content: content
              })
 
+    note_obj = %{
+      "type" => "Note",
+      "id" => activity_ap_id,
+      "content" => content,
+      "published" => activity_with_object.object.data["published"],
+      "actor" => AccountView.render("show.json", %{user: target_account})
+    }
+
     assert %Activity{
              actor: ^reporter_ap_id,
              data: %{
                "type" => "Flag",
                "content" => ^content,
                "context" => ^context,
-               "object" => [^target_ap_id, ^activity_ap_id]
+               "object" => [^target_ap_id, ^note_obj]
              }
            } = activity
   end
index 6c35a6f4d820f988a32c62f2a6a633836954ea4d..82389b344543dfbed9a5e6f78d2a03b7393eb6d1 100644 (file)
@@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
   alias Pleroma.User
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.ActivityPub.Transmogrifier
+  alias Pleroma.Web.AdminAPI.AccountView
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.OStatus
   alias Pleroma.Web.Websub.WebsubClientSubscription
@@ -1093,10 +1094,18 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
       {:ok, activity} = CommonAPI.post(user, %{"status" => "test post"})
       object = Object.normalize(activity)
 
+      note_obj = %{
+        "type" => "Note",
+        "id" => activity.data["id"],
+        "content" => "test post",
+        "published" => object.data["published"],
+        "actor" => AccountView.render("show.json", %{user: user})
+      }
+
       message = %{
         "@context" => "https://www.w3.org/ns/activitystreams",
         "cc" => [user.ap_id],
-        "object" => [user.ap_id, object.data["id"]],
+        "object" => [user.ap_id, activity],
         "type" => "Flag",
         "content" => "blocked AND reported!!!",
         "actor" => other_user.ap_id
@@ -1104,7 +1113,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
 
       assert {:ok, activity} = Transmogrifier.handle_incoming(message)
 
-      assert activity.data["object"] == [user.ap_id, object.data["id"]]
+      assert activity.data["object"] == [user.ap_id, note_obj]
       assert activity.data["content"] == "blocked AND reported!!!"
       assert activity.data["actor"] == other_user.ap_id
       assert activity.data["cc"] == [user.ap_id]
index c57ea7eb90161553e6a5efeb26704a8013875853..4475d06d22905492507d92fc74b0b2bce3db3583 100644 (file)
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do
   alias Pleroma.User
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.ActivityPub.Utils
+  alias Pleroma.Web.AdminAPI.AccountView
   alias Pleroma.Web.CommonAPI
 
   import Pleroma.Factory
@@ -581,11 +582,19 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do
           %{}
         )
 
+      note_obj = %{
+        "type" => "Note",
+        "id" => activity_ap_id,
+        "content" => content,
+        "published" => activity.object.data["published"],
+        "actor" => AccountView.render("show.json", %{user: target_account})
+      }
+
       assert %{
                "type" => "Flag",
                "content" => ^content,
                "context" => ^context,
-               "object" => [^target_ap_id, ^activity_ap_id],
+               "object" => [^target_ap_id, ^note_obj],
                "state" => "open"
              } = res
     end
index 83df44c36969d58b3e4574273a062f079c2c8484..709aa4dbef50f2b451d178ea15b936e8bd63220e 100644 (file)
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.CommonAPITest do
   alias Pleroma.User
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.ActivityPub.Visibility
+  alias Pleroma.Web.AdminAPI.AccountView
   alias Pleroma.Web.CommonAPI
 
   import Pleroma.Factory
@@ -385,6 +386,14 @@ defmodule Pleroma.Web.CommonAPITest do
         "status_ids" => [activity.id]
       }
 
+      note_obj = %{
+        "type" => "Note",
+        "id" => activity_ap_id,
+        "content" => "foobar",
+        "published" => activity.object.data["published"],
+        "actor" => AccountView.render("show.json", %{user: target_user})
+      }
+
       assert {:ok, flag_activity} = CommonAPI.report(reporter, report_data)
 
       assert %Activity{
@@ -392,7 +401,7 @@ defmodule Pleroma.Web.CommonAPITest do
                data: %{
                  "type" => "Flag",
                  "content" => ^comment,
-                 "object" => [^target_ap_id, ^activity_ap_id],
+                 "object" => [^target_ap_id, ^note_obj],
                  "state" => "open"
                }
              } = flag_activity