Federator: Add option do save failed activities

This commit is contained in:
lain 2020-09-03 17:13:04 +02:00
parent 9433311923
commit 47a67f1c8f
3 changed files with 43 additions and 1 deletions

View file

@ -798,6 +798,10 @@ config :floki, :html_parser, Floki.HTMLParser.FastHtml
config :pleroma, Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.PleromaAuthenticator
config :pleroma, :debug_failed_activities,
enabled: false,
folder: "failed_activities"
# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
import_config "#{Mix.env()}.exs"

View file

@ -86,13 +86,30 @@ defmodule Pleroma.Web.Federator do
{:error, :already_present}
e ->
# Just drop those for now
if Pleroma.Config.get([:debug_failed_activities, :enabled]) do
save_failed_activity(params)
end
Logger.debug("Unhandled activity")
Logger.debug(Jason.encode!(params, pretty: true))
{:error, e}
end
end
defp save_failed_activity(params) do
folder = Pleroma.Config.get([:debug_failed_activities, :folder], "failed_activities")
File.mkdir_p!(folder)
filename = URI.encode_www_form(params["id"] || Ecto.UUID.generate())
case File.write(Path.join([folder, filename]), Jason.encode!(params)) do
{:error, e} ->
Logger.debug("Can't write failed activity, reason: #{inspect(e)}")
_ ->
nil
end
end
def ap_enabled_actor(id) do
user = User.get_cached_by_ap_id(id)

View file

@ -135,6 +135,27 @@ defmodule Pleroma.Web.FederatorTest do
assert {:error, :already_present} = ObanHelpers.perform(job)
end
test "rejects unknown activities" do
params = %{
"@context" => "https://www.w3.org/ns/activitystreams",
"actor" => "http://mastodon.example.org/users/admin",
"type" => "Frobnicate",
"id" => "http://mastodon.example.org/users/admin/activities/1"
}
assert {:ok, job} = Federator.incoming_ap_doc(params)
assert {:error, _activity} = ObanHelpers.perform(job)
clear_config([:debug_failed_activities, :enabled], true)
assert {:ok, job} = Federator.incoming_ap_doc(params)
assert {:error, _activity} = ObanHelpers.perform(job)
debug_folder = Pleroma.Config.get([:debug_failed_activities, :folder])
assert File.exists?(Path.join(debug_folder, URI.encode_www_form(params["id"])))
end
test "rejects incoming AP docs with incorrect origin" do
params = %{
"@context" => "https://www.w3.org/ns/activitystreams",