Transmogrifier: Use new ingestion pipeline for Likes.
authorlain <lain@soykaf.club>
Wed, 16 Oct 2019 15:03:21 +0000 (17:03 +0200)
committerlain <lain@soykaf.club>
Wed, 16 Oct 2019 15:03:21 +0000 (17:03 +0200)
lib/pleroma/object/containment.ex
lib/pleroma/web/activity_pub/object_validator.ex
lib/pleroma/web/activity_pub/transmogrifier.ex

index f077a9f32436841f1ffb01975c970d3082fd80a7..edbe9238108480b216fe159ca247040b1811c812 100644 (file)
@@ -32,6 +32,18 @@ defmodule Pleroma.Object.Containment do
     get_actor(%{"actor" => actor})
   end
 
+  def get_object(%{"object" => id}) when is_binary(id) do
+    id
+  end
+
+  def get_object(%{"object" => %{"id" => id}}) when is_binary(id) do
+    id
+  end
+
+  def get_object(_) do
+    nil
+  end
+
   @doc """
   Checks that an imported AP object's actor matches the domain it came from.
   """
index 8ecad0decfd15747e65b9ce8c00c6633e4436744..0048cc4ec3b3a29d2747fe7a6e674fce9cb545da 100644 (file)
@@ -31,7 +31,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
 
   def common_validations(object, meta) do
     with {_, {:ok, object, meta}} <- {:validate_id, validate_id(object, meta)},
-      {_, {:ok, object, meta}} <- {:validate_actor, validate_actor(object, meta)} do
+         {_, {:ok, object, meta}} <- {:validate_actor, validate_actor(object, meta)} do
       {:ok, object, meta}
     else
       e -> {:error, e}
@@ -43,7 +43,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
 
   def validate(%{"type" => "Like"} = object, meta) do
     with {:ok, object, meta} <- common_validations(object, meta),
-         {_, %Object{} = liked_object} <- {:find_liked_object, Object.normalize(object["object"])},
+         {_, %Object{} = liked_object} <-
+           {:find_liked_object, Object.normalize(object["object"])},
          {_, nil} <- {:existing_like, Utils.get_existing_like(object["actor"], liked_object)} do
       {:ok, object, meta}
     else
index b56343beb619f330a195979a246b59517e807c54..3e982adcb514d3ac83e93c7d53ce2ba84346b045 100644 (file)
@@ -563,19 +563,38 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
   end
 
   def handle_incoming(
-        %{"type" => "Like", "object" => object_id, "actor" => _actor, "id" => id} = data,
+        %{"type" => "Like", "object" => _object_id, "actor" => _actor, "id" => _id} = data,
         _options
       ) 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, activity, _object} <- ActivityPub.like(actor, object, id, false) do
+    with data <- Map.take(data, ["type", "object", "actor", "context", "id"]),
+         actor <- Containment.get_actor(data),
+         object <- Containment.get_object(data),
+         data <- data |> Map.put("actor", actor) |> Map.put("object", object),
+         _user <- User.get_or_fetch_by_ap_id(actor),
+         object <- Object.normalize(object),
+         data <- Map.put_new(data, "context", object.data["context"]),
+         {_, {:ok, activity, _meta}} <-
+           {:common_pipeline, ActivityPub.common_pipeline(data, local: false)} do
       {:ok, activity}
     else
-      _e -> :error
+      e -> {:error, e}
     end
   end
 
+  # def handle_incoming(
+  #       %{"type" => "Like", "object" => object_id, "actor" => _actor, "id" => id} = data,
+  #       _options
+  #     ) 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, activity, _object} <- ActivityPub.like(actor, object, id, false) do
+  #     {:ok, activity}
+  #   else
+  #     _e -> :error
+  #   end
+  # end
+
   def handle_incoming(
         %{"type" => "Announce", "object" => object_id, "actor" => _actor, "id" => id} = data,
         _options