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 @@ def get_actor(%{"actor" => nil, "attributedTo" => actor}) when not is_nil(actor)
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 @@ def validate_actor(object, meta) 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 @@ def validate(object, meta)
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 @@ def handle_incoming(
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