Transmogrifier: Use new ingestion pipeline for Likes.

This commit is contained in:
lain 2019-10-16 17:03:21 +02:00
parent 6e4f52f8a2
commit 081e8206ab
3 changed files with 40 additions and 8 deletions

View file

@ -32,6 +32,18 @@ defmodule Pleroma.Object.Containment do
get_actor(%{"actor" => actor}) get_actor(%{"actor" => actor})
end 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 """ @doc """
Checks that an imported AP object's actor matches the domain it came from. Checks that an imported AP object's actor matches the domain it came from.
""" """

View file

@ -31,7 +31,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
def common_validations(object, meta) do def common_validations(object, meta) do
with {_, {:ok, object, meta}} <- {:validate_id, validate_id(object, meta)}, 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} {:ok, object, meta}
else else
e -> {:error, e} e -> {:error, e}
@ -43,7 +43,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do
def validate(%{"type" => "Like"} = object, meta) do def validate(%{"type" => "Like"} = object, meta) do
with {:ok, object, meta} <- common_validations(object, meta), 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 {_, nil} <- {:existing_like, Utils.get_existing_like(object["actor"], liked_object)} do
{:ok, object, meta} {:ok, object, meta}
else else

View file

@ -563,19 +563,38 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
end end
def handle_incoming( def handle_incoming(
%{"type" => "Like", "object" => object_id, "actor" => _actor, "id" => id} = data, %{"type" => "Like", "object" => _object_id, "actor" => _actor, "id" => _id} = data,
_options _options
) do ) do
with actor <- Containment.get_actor(data), with data <- Map.take(data, ["type", "object", "actor", "context", "id"]),
{:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), actor <- Containment.get_actor(data),
{:ok, object} <- get_obj_helper(object_id), object <- Containment.get_object(data),
{:ok, activity, _object} <- ActivityPub.like(actor, object, id, false) do 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} {:ok, activity}
else else
_e -> :error e -> {:error, e}
end end
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( def handle_incoming(
%{"type" => "Announce", "object" => object_id, "actor" => _actor, "id" => id} = data, %{"type" => "Announce", "object" => object_id, "actor" => _actor, "id" => id} = data,
_options _options