summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2020-09-03 17:13:04 +0200
committerlain <lain@soykaf.club>2020-09-03 17:13:04 +0200
commit47a67f1c8f4b87fb13092e1005f8c9f1f46a2c7a (patch)
tree364c2f950a53e99ead446d41c9d1e81d0a6543b7
parent9433311923d4b41b057ce6cb1632ff27d46919b4 (diff)
Federator: Add option do save failed activitiesmessage-debug-mode
-rw-r--r--config/config.exs4
-rw-r--r--lib/pleroma/web/federator/federator.ex19
-rw-r--r--test/web/federator_test.exs21
3 files changed, 43 insertions, 1 deletions
diff --git a/config/config.exs b/config/config.exs
index ed37b93c0..ec1f8f078 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -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"
diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex
index f5803578d..632388238 100644
--- a/lib/pleroma/web/federator/federator.ex
+++ b/lib/pleroma/web/federator/federator.ex
@@ -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)
diff --git a/test/web/federator_test.exs b/test/web/federator_test.exs
index 592fdccd1..efd2112a9 100644
--- a/test/web/federator_test.exs
+++ b/test/web/federator_test.exs
@@ -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",