commit: 14caaa8f236268b931695dd7f175c0142be3bf17
parent 2980788c8ec973c48d04b8f6aa93ddafab93c168
Author: feld <feld@feld.me>
Date: Wed, 27 Aug 2025 10:43:35 +0000
Merge branch 'moderation-log-fix-3385' into 'develop'
Fix ModerationLog FunctionClauseError for unknown actions
Closes #3385
See merge request pleroma/pleroma!4384
Diffstat:
3 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/changelog.d/moderation-log-unknown-actions.fix b/changelog.d/moderation-log-unknown-actions.fix
@@ -0,0 +1 @@
+Fix ModerationLog FunctionClauseError for unknown actions
+\ No newline at end of file
diff --git a/lib/pleroma/moderation_log.ex b/lib/pleroma/moderation_log.ex
@@ -575,6 +575,12 @@ defmodule Pleroma.ModerationLog do
"@#{actor_nickname} requested account backup for @#{user_nickname}"
end
+ def get_log_entry_message(%ModerationLog{data: data}) do
+ actor_name = get_in(data, ["actor", "nickname"]) || "unknown"
+ action = data["action"] || "unknown"
+ "@#{actor_name} performed action #{action}"
+ end
+
defp nicknames_to_string(nicknames) do
nicknames
|> Enum.map(&"@#{&1}")
diff --git a/test/pleroma/moderation_log_test.exs b/test/pleroma/moderation_log_test.exs
@@ -308,4 +308,37 @@ defmodule Pleroma.ModerationLogTest do
assert log.data["message"] == "@#{moderator.nickname} deleted status ##{note.id}"
end
end
+
+ describe "get_log_entry_message/1" do
+ setup do
+ moderator = insert(:user, is_moderator: true)
+ [moderator: moderator]
+ end
+
+ test "handles unknown action types gracefully", %{moderator: moderator} do
+ log_entry = %ModerationLog{
+ data: %{
+ "actor" => %{"nickname" => moderator.nickname},
+ "action" => "unknown_action",
+ "some_data" => "test_value"
+ }
+ }
+
+ assert ModerationLog.get_log_entry_message(log_entry) =~ moderator.nickname
+ assert ModerationLog.get_log_entry_message(log_entry) =~ "unknown_action"
+ end
+
+ test "handles malformed log entries gracefully" do
+ log_entry = %ModerationLog{
+ data: %{
+ "action" => "force_password_reset"
+ # Missing "actor" and "subject" fields
+ }
+ }
+
+ message = ModerationLog.get_log_entry_message(log_entry)
+ assert is_binary(message)
+ assert message =~ "force_password_reset"
+ end
+ end
end