From 79d734ef26fc48bc22bc816db6721ceb7f429d0a Mon Sep 17 00:00:00 2001 From: simoleo89 Date: Sat, 13 Jun 2026 15:55:28 +0200 Subject: [PATCH] fix(housekeeping): audit room and session actions The first audit coverage pass covered economy/account-impacting HK actions, but room and session mutators still returned success without an audit row. Add audit entries for room deletion, force disconnect, room kicks, user kicks, room mute, room state changes, and successful unbans, and extend the coverage contract to keep these privileged actions tracked. --- .../housekeeping/HousekeepingDeleteRoomEvent.java | 5 +++++ .../HousekeepingForceDisconnectUserEvent.java | 5 +++++ .../housekeeping/HousekeepingKickAllFromRoomEvent.java | 5 +++++ .../incoming/housekeeping/HousekeepingKickUserEvent.java | 5 +++++ .../incoming/housekeeping/HousekeepingMuteRoomEvent.java | 5 +++++ .../housekeeping/HousekeepingRoomStateEvent.java | 5 +++++ .../housekeeping/HousekeepingUnbanUserEvent.java | 7 +++++++ .../HousekeepingAuditCoverageContractTest.java | 9 ++++++++- 8 files changed, 45 insertions(+), 1 deletion(-) diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingDeleteRoomEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingDeleteRoomEvent.java index 9e85deb5..52702f23 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingDeleteRoomEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingDeleteRoomEvent.java @@ -63,6 +63,11 @@ public class HousekeepingDeleteRoomEvent extends MessageHandler { return; } + com.eu.habbo.habbohotel.modtool.HousekeepingAuditLog.log( + this.client.getHabbo().getHabboInfo().getId(), + this.client.getHabbo().getHabboInfo().getUsername(), + ACTION_KEY, 0, "roomId=" + roomId, + this.client.getHabbo().getHabboInfo().getIpLogin()); this.client.sendResponse(new HousekeepingActionResultComposer(ACTION_KEY, true, roomId, "")); } } diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingForceDisconnectUserEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingForceDisconnectUserEvent.java index 9ab0338c..785523b3 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingForceDisconnectUserEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingForceDisconnectUserEvent.java @@ -52,6 +52,11 @@ public class HousekeepingForceDisconnectUserEvent extends MessageHandler { // ACK first so the action result lands before the target's socket // closes (otherwise an alerted user on the same emulator thread may // already be torn down when we try to write). + com.eu.habbo.habbohotel.modtool.HousekeepingAuditLog.log( + this.client.getHabbo().getHabboInfo().getId(), + this.client.getHabbo().getHabboInfo().getUsername(), + ACTION_KEY, userId, "reason=" + (reason != null ? reason : ""), + this.client.getHabbo().getHabboInfo().getIpLogin()); this.client.sendResponse(new HousekeepingActionResultComposer(ACTION_KEY, true, userId, "")); target.disconnect(); diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingKickAllFromRoomEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingKickAllFromRoomEvent.java index 76ae8e82..72644201 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingKickAllFromRoomEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingKickAllFromRoomEvent.java @@ -36,6 +36,11 @@ public class HousekeepingKickAllFromRoomEvent extends MessageHandler { room.ejectAll(); + com.eu.habbo.habbohotel.modtool.HousekeepingAuditLog.log( + this.client.getHabbo().getHabboInfo().getId(), + this.client.getHabbo().getHabboInfo().getUsername(), + ACTION_KEY, 0, "roomId=" + roomId, + this.client.getHabbo().getHabboInfo().getIpLogin()); this.client.sendResponse(new HousekeepingActionResultComposer(ACTION_KEY, true, roomId, "")); } } diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingKickUserEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingKickUserEvent.java index 7f2006cb..93ed2992 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingKickUserEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingKickUserEvent.java @@ -60,6 +60,11 @@ public class HousekeepingKickUserEvent extends MessageHandler { target.alert(reason); } + com.eu.habbo.habbohotel.modtool.HousekeepingAuditLog.log( + this.client.getHabbo().getHabboInfo().getId(), + this.client.getHabbo().getHabboInfo().getUsername(), + ACTION_KEY, userId, "reason=" + (reason != null ? reason : ""), + this.client.getHabbo().getHabboInfo().getIpLogin()); this.client.sendResponse(new HousekeepingActionResultComposer(ACTION_KEY, true, userId, "")); } } diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingMuteRoomEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingMuteRoomEvent.java index b471affc..1d79f96f 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingMuteRoomEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingMuteRoomEvent.java @@ -45,6 +45,11 @@ public class HousekeepingMuteRoomEvent extends MessageHandler { room.setMuted(minutes > 0); + com.eu.habbo.habbohotel.modtool.HousekeepingAuditLog.log( + this.client.getHabbo().getHabboInfo().getId(), + this.client.getHabbo().getHabboInfo().getUsername(), + ACTION_KEY, 0, "roomId=" + roomId + " minutes=" + minutes + " muted=" + (minutes > 0), + this.client.getHabbo().getHabboInfo().getIpLogin()); this.client.sendResponse(new HousekeepingActionResultComposer(ACTION_KEY, true, roomId, "")); } } diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingRoomStateEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingRoomStateEvent.java index ea902db8..3cf5f984 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingRoomStateEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingRoomStateEvent.java @@ -44,6 +44,11 @@ public class HousekeepingRoomStateEvent extends MessageHandler { room.setState(open ? RoomState.OPEN : RoomState.LOCKED); room.save(); + com.eu.habbo.habbohotel.modtool.HousekeepingAuditLog.log( + this.client.getHabbo().getHabboInfo().getId(), + this.client.getHabbo().getHabboInfo().getUsername(), + actionKey, 0, "roomId=" + roomId + " open=" + open, + this.client.getHabbo().getHabboInfo().getIpLogin()); this.client.sendResponse(new HousekeepingActionResultComposer(actionKey, true, roomId, "")); } } diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingUnbanUserEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingUnbanUserEvent.java index 548351fa..8c785c93 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingUnbanUserEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingUnbanUserEvent.java @@ -44,6 +44,13 @@ public class HousekeepingUnbanUserEvent extends MessageHandler { // on a never-banned user is a benign no-op that returns false. boolean cleared = Emulator.getGameEnvironment().getModToolManager().unban(info.getUsername()); + if (cleared) { + com.eu.habbo.habbohotel.modtool.HousekeepingAuditLog.log( + this.client.getHabbo().getHabboInfo().getId(), + this.client.getHabbo().getHabboInfo().getUsername(), + ACTION_KEY, userId, "username=" + info.getUsername(), + this.client.getHabbo().getHabboInfo().getIpLogin()); + } this.client.sendResponse(new HousekeepingActionResultComposer(ACTION_KEY, cleared, cleared ? userId : 0, cleared ? "" : "housekeeping.error.no_active_ban")); } } diff --git a/Emulator/src/test/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingAuditCoverageContractTest.java b/Emulator/src/test/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingAuditCoverageContractTest.java index 01981c7a..9171a4cd 100644 --- a/Emulator/src/test/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingAuditCoverageContractTest.java +++ b/Emulator/src/test/java/com/eu/habbo/messages/incoming/housekeeping/HousekeepingAuditCoverageContractTest.java @@ -17,7 +17,14 @@ class HousekeepingAuditCoverageContractTest { "HousekeepingTradeLockUserEvent.java", "HousekeepingGrantItemEvent.java", "HousekeepingTransferRoomOwnershipEvent.java", - "HousekeepingSendHotelAlertEvent.java" + "HousekeepingSendHotelAlertEvent.java", + "HousekeepingDeleteRoomEvent.java", + "HousekeepingForceDisconnectUserEvent.java", + "HousekeepingKickAllFromRoomEvent.java", + "HousekeepingKickUserEvent.java", + "HousekeepingMuteRoomEvent.java", + "HousekeepingRoomStateEvent.java", + "HousekeepingUnbanUserEvent.java" ); @Test