aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2019-10-16 17:03:21 +0200
committerlain <lain@soykaf.club>2019-10-16 17:03:21 +0200
commit081e8206ab75e336a76b621508b3999170159ec6 (patch)
treefbd46de4cfbb7c6d20d4bfb07f3f68bb2a58ff80 /lib
parent6e4f52f8a2e510273149acbaf629521d1b4aec2e (diff)
downloadpleroma-081e8206ab75e336a76b621508b3999170159ec6.tar.gz
Transmogrifier: Use new ingestion pipeline for Likes.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/object/containment.ex12
-rw-r--r--lib/pleroma/web/activity_pub/object_validator.ex5
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex31
3 files changed, 40 insertions, 8 deletions
diff --git a/lib/pleroma/object/containment.ex b/lib/pleroma/object/containment.ex
index f077a9f32..edbe92381 100644
--- a/lib/pleroma/object/containment.ex
+++ b/lib/pleroma/object/containment.ex
@@ -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.
"""
diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex
index 8ecad0dec..0048cc4ec 100644
--- a/lib/pleroma/web/activity_pub/object_validator.ex
+++ b/lib/pleroma/web/activity_pub/object_validator.ex
@@ -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
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index b56343beb..3e982adcb 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -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