Linting.
[akkoma] / lib / pleroma / web / activity_pub / transmogrifier.ex
index 54c18bc0e920e0647563d7e051c6137065afa1c7..2c1f01c18b3e3f7cff36a97cf174d26ee57e1821 100644 (file)
@@ -570,7 +570,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     "angry" => "💢",
     "confused" => "😥",
     "rip" => "😇",
-    "pudding" => "🍮"
+    "pudding" => "🍮",
+    "star" => "⭐"
   }
 
   @doc "Rewrite misskey likes into EmojiReactions"
@@ -583,7 +584,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
       ) do
     data
     |> Map.put("type", "EmojiReaction")
-    |> Map.put("content", @misskey_reactions[reaction])
+    |> Map.put("content", @misskey_reactions[reaction] || reaction)
     |> handle_incoming(options)
   end
 
@@ -628,7 +629,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
       ) do
     with actor <- Containment.get_actor(data),
          {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor),
-         {:ok, object} <- get_obj_helper(object_id),
+         {:ok, object} <- get_embedded_obj_helper(object_id, actor),
          public <- Visibility.is_public?(data),
          {:ok, activity, _object} <- ActivityPub.announce(actor, object, id, false, public) do
       {:ok, activity}
@@ -669,7 +670,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
         to: data["to"] || [],
         cc: data["cc"] || [],
         object: object,
-        actor: actor_id
+        actor: actor_id,
+        activity_id: data["id"]
       })
     else
       e ->
@@ -851,6 +853,29 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     end
   end
 
+  @spec get_embedded_obj_helper(String.t() | Object.t(), User.t()) :: {:ok, Object.t()} | nil
+  def get_embedded_obj_helper(%{"attributedTo" => attributed_to, "id" => object_id} = data, %User{
+        ap_id: ap_id
+      })
+      when attributed_to == ap_id do
+    with {:ok, activity} <-
+           handle_incoming(%{
+             "type" => "Create",
+             "to" => data["to"],
+             "cc" => data["cc"],
+             "actor" => attributed_to,
+             "object" => data
+           }) do
+      {:ok, Object.normalize(activity)}
+    else
+      _ -> get_obj_helper(object_id)
+    end
+  end
+
+  def get_embedded_obj_helper(object_id, _) do
+    get_obj_helper(object_id)
+  end
+
   def set_reply_to_uri(%{"inReplyTo" => in_reply_to} = object) when is_binary(in_reply_to) do
     with false <- String.starts_with?(in_reply_to, "http"),
          {:ok, %{data: replied_to_object}} <- get_obj_helper(in_reply_to) do