X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Ffederator.ex;h=bc61130f1ef7aa322ddc7dca8a02af2493ec442b;hb=0b14f02ed20173c03dada9edcdfa55dc98cc2420;hp=13065414545829c8bf4696bbfff83246433ea551;hpb=a65fc78c6a14e1333ce71d28824a490a8a6da69b;p=akkoma diff --git a/lib/pleroma/web/federator.ex b/lib/pleroma/web/federator.ex index 130654145..bc61130f1 100644 --- a/lib/pleroma/web/federator.ex +++ b/lib/pleroma/web/federator.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2020 Pleroma Authors +# Copyright © 2017-2021 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.Federator do @@ -15,6 +15,8 @@ defmodule Pleroma.Web.Federator do require Logger + @behaviour Pleroma.Web.Federator.Publishing + @doc """ Returns `true` if the distance to target object does not exceed max configured value. Serves to prevent fetching of very long threads, especially useful on smaller instances. @@ -39,12 +41,22 @@ defmodule Pleroma.Web.Federator do ReceiverWorker.enqueue("incoming_ap_doc", %{"params" => params}) end + @impl true def publish(%{id: "pleroma:fakeid"} = activity) do perform(:publish, activity) end - def publish(activity) do - PublisherWorker.enqueue("publish", %{"activity_id" => activity.id}) + @impl true + def publish(%{data: %{"object" => object}} = activity) when is_binary(object) do + PublisherWorker.enqueue("publish", %{"activity_id" => activity.id, "object_data" => nil}) + end + + @impl true + def publish(%{data: %{"object" => object}} = activity) when is_map(object) or is_list(object) do + PublisherWorker.enqueue("publish", %{ + "activity_id" => activity.id, + "object_data" => Jason.encode!(object) + }) end # Job Worker Callbacks @@ -57,10 +69,8 @@ defmodule Pleroma.Web.Federator do def perform(:publish, activity) do Logger.debug(fn -> "Running publish for #{activity.data["id"]}" end) - with %User{} = actor <- User.get_cached_by_ap_id(activity.data["actor"]), - {:ok, actor} <- User.ensure_keys_present(actor) do - Publisher.publish(actor, activity) - end + %User{} = actor = User.get_cached_by_ap_id(activity.data["actor"]) + Publisher.publish(actor, activity) end def perform(:incoming_ap_doc, params) do @@ -92,6 +102,11 @@ defmodule Pleroma.Web.Federator do Logger.debug("Unhandled actor #{actor}, #{inspect(e)}") {:error, e} + {:error, {:validate_object, _}} = e -> + Logger.error("Incoming AP doc validation error: #{inspect(e)}") + Logger.debug(Jason.encode!(params, pretty: true)) + e + e -> # Just drop those for now Logger.debug(fn -> "Unhandled activity\n" <> Jason.encode!(params, pretty: true) end)