logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: f9fe7e5c3a39151047b93117259eae7136376790
parent 2b2055b3ace9a696f55e9d14f3b7b45b6d83d2dd
Author: lain <lain@soykaf.club>
Date:   Thu,  3 Sep 2020 17:13:04 +0200

Federator: Add option do save failed activities

Diffstat:

Mconfig/config.exs4++++
Mlib/pleroma/web/federator.ex19++++++++++++++++++-
Mtest/pleroma/web/federator_test.exs21+++++++++++++++++++++
3 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/config/config.exs b/config/config.exs @@ -832,6 +832,10 @@ config :pleroma, Pleroma.User.Backup, limit_days: 7, dir: nil +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" diff --git a/lib/pleroma/web/federator.ex b/lib/pleroma/web/federator.ex @@ -102,12 +102,29 @@ defmodule Pleroma.Web.Federator do e e -> - # Just drop those for now + if Pleroma.Config.get([:debug_failed_activities, :enabled]) do + save_failed_activity(params) + end + Logger.debug(fn -> "Unhandled activity\n" <> Jason.encode!(params, pretty: true) end) {: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) diff --git a/test/pleroma/web/federator_test.exs b/test/pleroma/web/federator_test.exs @@ -136,6 +136,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",