Send only required pieces of the %Plug.Conn{} through as it needs to get serialized to JSON

This commit is contained in:
Mark Felder 2023-12-06 13:45:05 -05:00
parent 33efa1ad23
commit 3a9dc3d28c
3 changed files with 16 additions and 11 deletions

View file

@ -284,7 +284,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
end
def inbox(conn, _params) do
case Federator.incoming_ap_doc(conn) do
conn_data = %{params: conn.params, req_headers: conn.req_headers}
case Federator.incoming_ap_doc(conn_data) do
{:ok, %Oban.Job{}} ->
json(conn, "ok")

View file

@ -36,8 +36,8 @@ defmodule Pleroma.Web.Federator do
# Client API
def incoming_ap_doc(conn) do
ReceiverWorker.enqueue("incoming_ap_doc", %{"conn" => conn})
def incoming_ap_doc(conn_data) do
ReceiverWorker.enqueue("incoming_ap_doc", %{"conn_data" => conn_data})
end
@impl true

View file

@ -11,14 +11,17 @@ defmodule Pleroma.Workers.ReceiverWorker do
@impl Oban.Worker
def perform(%Job{
args: %{"op" => "incoming_ap_doc", "conn" => conn = %{params: %{"nickname" => nickname}}}
args: %{
"op" => "incoming_ap_doc",
"conn_data" => conn_data = %{params: %{"nickname" => nickname}}
}
}) do
with {:signature, true} <- {:signature, HTTPSignatures.validate_conn(conn)},
with {:signature, true} <- {:signature, HTTPSignatures.validate_conn(conn_data)},
{:nickname, %User{} = recipient} <- {:nickname, User.get_cached_by_nickname(nickname)},
{:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(conn.params["actor"]),
{:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(conn_data.params["actor"]),
{:in_message, true} <-
{:in_message, Utils.recipient_in_message(recipient, actor, conn.params)},
split_params <- Utils.maybe_splice_recipient(recipient.ap_id, conn.params),
{:in_message, Utils.recipient_in_message(recipient, actor, conn_data.params)},
split_params <- Utils.maybe_splice_recipient(recipient.ap_id, conn_data.params),
{:ok, res} <- Federator.perform(:incoming_ap_doc, split_params) do
{:ok, res}
else
@ -26,9 +29,9 @@ defmodule Pleroma.Workers.ReceiverWorker do
end
end
def perform(%Job{args: %{"op" => "incoming_ap_doc", "conn" => conn}}) do
with {:signature, true} <- {:signature, HTTPSignatures.validate_conn(conn)},
{:ok, res} <- Federator.perform(:incoming_ap_doc, conn.params) do
def perform(%Job{args: %{"op" => "incoming_ap_doc", "conn_data" => conn_data}}) do
with {:signature, true} <- {:signature, HTTPSignatures.validate_conn(conn_data)},
{:ok, res} <- Federator.perform(:incoming_ap_doc, conn_data.params) do
{:ok, res}
else
e -> process_errors(e)