logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: 4f5b5ac81157792875ce444b5e74ee70e175a7b5
parent 212bcf8d00e40c70728a5479b0bf6421a0809cd6
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 @@ -838,6 +838,10 @@ config :pleroma, Pleroma.User.Backup, limit_days: 7, dir: nil +config :pleroma, :debug_failed_activities, + enabled: false, + folder: "failed_activities" + config :pleroma, ConcurrentLimiter, [ {Pleroma.Web.RichMedia.Helpers, [max_running: 5, max_waiting: 5]}, {Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy, [max_running: 5, max_waiting: 5]} 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",