Commit Graph

579 Commits

Author SHA1 Message Date
simoleo89 5dfa8df5f4 fix(wired): bound date range inputs 2026-06-17 18:40:48 +02:00
DuckieTM 416d0bb088 Merge pull request #213 from simoleo89/fix/room-user-safety
Guard room user moderation packets
2026-06-15 22:18:09 +02:00
DuckieTM 9c3d887447 Merge pull request #212 from simoleo89/fix/room-item-safety
Harden room item packet guards
2026-06-15 22:17:39 +02:00
DuckieTM 5f4e91133e Merge branch 'dev' into fix/catalog-inventory-safety 2026-06-15 22:17:00 +02:00
DuckieTM 47dcbae4b3 Merge pull request #210 from simoleo89/feat/earnings-center
feat: add emulator earnings center
2026-06-15 22:16:09 +02:00
DuckieTM cdc0620c9b Merge pull request #209 from simoleo89/fix/forum-input-guards
fix(forums): validate guild forum inputs
2026-06-15 22:15:49 +02:00
simoleo89 827b130ccc fix(rooms): guard room user moderation packets 2026-06-15 22:15:39 +02:00
simoleo89 bea385afe2 fix(rooms): harden room item packet guards 2026-06-15 22:07:24 +02:00
simoleo89 8c7d6db135 fix(catalog): harden marketplace and inventory mutations 2026-06-15 22:01:38 +02:00
simoleo89 95bd84a95f fix(rcon): register guard defaults before startup 2026-06-15 22:01:25 +02:00
simoleo89 22b05b4e52 feat(earnings): gate rewards by user progress 2026-06-15 21:49:45 +02:00
simoleo89 766d8d67d3 feat(earnings): integrate native reward sources 2026-06-15 21:14:35 +02:00
simoleo89 e29e06201c feat(earnings): add emulator rewards center 2026-06-15 20:41:00 +02:00
simoleo89 916ef7af3a fix(modtool): guard ticket lifecycle inputs 2026-06-15 20:15:47 +02:00
simoleo89 044d1141cd fix(modtool): validate report payloads 2026-06-15 20:15:46 +02:00
simoleo89 c98261d8c3 fix(forums): validate guild forum inputs 2026-06-15 20:13:42 +02:00
simoleo89 8ba9132e7e fix(modtool): bound staff supplied messages 2026-06-15 19:54:34 +02:00
simoleo89 36a06647f0 fix(modtool): enforce staff target rank ceilings 2026-06-15 19:51:36 +02:00
DuckieTM 916cf9ba9e Merge pull request #203 from simoleo89/fix/housekeeping-core-peer-rank
fix(housekeeping): harden privileged staff actions
2026-06-15 07:24:55 +02:00
DuckieTM 0af489cef2 Merge pull request #199 from simoleo89/fix/modtool-sanction-rank-ceilings
fix(modtool): enforce permissions and sanction rank ceilings
2026-06-15 07:24:30 +02:00
DuckieTM c048713b22 Merge branch 'dev' into chore/deps-resilience-validation 2026-06-15 07:24:02 +02:00
DuckieTM e5e3918513 Merge pull request #190 from simoleo89/fix/catalog-page-mutation-guards
fix(catalog): harden admin mutations and voucher claims
2026-06-15 07:22:47 +02:00
DuckieTM 14593b4638 Merge pull request #188 from simoleo89/fix/furnieditor-update-validation
fix(furni-editor): validate and sync furnidata changes
2026-06-15 07:22:24 +02:00
DuckieTM c199d805d8 Merge pull request #184 from simoleo89/fix/guild-badge-packet-parts
fix(guilds): validate badge packets and memberships
2026-06-15 07:22:01 +02:00
DuckieTM 3282430b67 Merge pull request #183 from simoleo89/fix/command-description-texts
fix(commands): complete and quiet command descriptions
2026-06-15 07:21:39 +02:00
DuckieTM 560def21d7 Merge pull request #180 from simoleo89/fix/items-ownership-and-charges
fix(items): harden ownership and redeem lifecycle
2026-06-15 07:21:09 +02:00
DuckieTM 5011fdf848 Merge pull request #179 from simoleo89/fix/rooms-self-moderation-scope
fix(rooms): scope room actions and bound rights removal
2026-06-15 07:20:41 +02:00
DuckieTM d34b44a656 Merge pull request #177 from simoleo89/style/startup-console
style(startup): console banner/splash/colors
2026-06-15 07:20:23 +02:00
DuckieTM 848b8bd5ce Merge pull request #176 from simoleo89/fix/messages-duplicate-aliases
fix(messages): silence duplicate packet aliases
2026-06-15 07:19:39 +02:00
DuckieTM 80400f828c Merge pull request #172 from simoleo89/fix/marketplace-claimed-payout
fix(marketplace): only pay out claimed offers after detach
2026-06-15 07:19:10 +02:00
simoleo89 ec24283e0f fix(housekeeping): protect room owner mutations 2026-06-14 22:17:47 +02:00
simoleo89 93c4565660 fix(housekeeping): bound staff supplied text 2026-06-14 22:14:41 +02:00
simoleo89 31027095ec fix(housekeeping): enforce rank ceilings on rank changes 2026-06-14 21:55:19 +02:00
simoleo89 aa6dcd1062 fix(rcon): bound alert payloads 2026-06-14 21:40:59 +02:00
simoleo89 11554eae7b fix(rcon): validate social and room commands 2026-06-14 21:23:21 +02:00
simoleo89 25273679a1 fix(rcon): constrain remote command execution 2026-06-14 21:18:28 +02:00
simoleo89 15b56f9519 fix(rcon): bound mute and achievement mutations 2026-06-14 21:13:24 +02:00
simoleo89 8412a51ec4 fix(rcon): guard user update mutations 2026-06-14 21:02:28 +02:00
simoleo89 5d8dc670bd fix(rcon): cap subscription duration changes 2026-06-14 21:02:28 +02:00
simoleo89 81c8dfc605 fix(rcon): harden gift creation requests 2026-06-14 21:02:27 +02:00
simoleo89 4747699656 fix(rcon): validate room ownership and clothing grants 2026-06-14 21:02:27 +02:00
simoleo89 dba0337a7b fix(rcon): validate grant requests 2026-06-14 21:02:18 +02:00
simoleo89 3cb24a5185 fix(rcon): constrain setrank requests 2026-06-14 21:01:27 +02:00
simoleo89 775197984f fix(rcon): validate offline badge targets
GiveBadge could treat a missing offline user as eligible for a badge and insert through a nullable user subquery. Depending on SQL mode this could fail late or persist an orphaned user_id value. Resolve the offline user first, return HABBO_NOT_FOUND when absent, and insert badges with the resolved user id only.
2026-06-14 21:01:27 +02:00
simoleo89 4eafb54c57 fix(rcon): allow online motto updates outside rooms
SetMotto updated the in-memory motto and then unconditionally broadcast RoomUserData through the current room. Online users without a current room could throw a null-pointer exception after the state change, making the RCON call report an error despite mutating the user. Only broadcast room data when a room is present and cover the invariant with a contract test.
2026-06-14 21:01:26 +02:00
simoleo89 d8260ec461 fix(rcon): bind offline respect counters correctly
GiveRespect inverted the offline SQL parameters for respects_given and respects_received. Online users received the intended counters, but offline users had the two persisted counters swapped. Bind respect_given to respects_given and respect_received to respects_received, with a contract test to keep the RCON offline path aligned.
2026-06-14 21:01:26 +02:00
simoleo89 b94acdf719 fix(rcon): report missing offline credit targets
GiveCredits treated offline UPDATE execution as success without checking whether any user row was changed. Nonexistent user ids could therefore return an offline success response while granting nothing. Use executeUpdate(), return HABBO_NOT_FOUND when no row is affected, and keep SQL errors from falling through to the offline success message.
2026-06-14 21:01:26 +02:00
simoleo89 4330bf5a62 fix(rcon): always release inbound buffers
RCONServerHandler released the inbound ByteBuf only after successfully parsing, writing, flushing, and closing the response. Any exception before the tail release could leak Netty buffers and let malformed RCON traffic consume memory over time. Guard non-ByteBuf messages, release accepted buffers from a finally block, and add a contract test for the release invariant.
2026-06-14 21:01:16 +02:00
simoleo89 aaad94f954 fix(rcon): upsert offline pixel grants
RCON GivePixels previously used an UPDATE for offline users, so users without an existing users_currency type 0 row received no pixels while the command still returned success. Match the GivePoints and housekeeping paths with an upsert and add a contract test that keeps offline pixel grants creating missing currency rows.
2026-06-14 21:00:49 +02:00
simoleo89 d9cf70910f fix(housekeeping): cap sanction durations safely 2026-06-14 21:00:37 +02:00