logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://anongit.hacktivis.me/git/pleroma.git/
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:

Achangelog.d/moderation-log-unknown-actions.fix2++
Mlib/pleroma/moderation_log.ex6++++++
Mtest/pleroma/moderation_log_test.exs33+++++++++++++++++++++++++++++++++
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