You've already forked Arcturus-Morningstar-Extended
mirror of
https://github.com/duckietm/Arcturus-Morningstar-Extended.git
synced 2026-06-19 15:06:19 +00:00
fix(guilds): protect admin members
This commit is contained in:
+13
@@ -40,6 +40,19 @@ public class GuildRemoveMemberEvent extends MessageHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GuildMember targetMember = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, userId);
|
||||||
|
if (targetMember == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean actorIsGuildOwner = guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || member.getRank().equals(GuildRank.OWNER);
|
||||||
|
boolean actorIsGlobalGuildAdmin = this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN);
|
||||||
|
if ((targetMember.getRank().equals(GuildRank.ADMIN) || targetMember.getRank().equals(GuildRank.OWNER))
|
||||||
|
&& !actorIsGuildOwner
|
||||||
|
&& !actorIsGlobalGuildAdmin) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (userId == this.client.getHabbo().getHabboInfo().getId() || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || member.getRank().equals(GuildRank.OWNER) || member.getRank().equals(GuildRank.ADMIN) || this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN)) {
|
if (userId == this.client.getHabbo().getHabboInfo().getId() || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || member.getRank().equals(GuildRank.OWNER) || member.getRank().equals(GuildRank.ADMIN) || this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN)) {
|
||||||
Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(userId);
|
Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(userId);
|
||||||
GuildRemovedMemberEvent removedMemberEvent = new GuildRemovedMemberEvent(guild, userId, habbo);
|
GuildRemovedMemberEvent removedMemberEvent = new GuildRemovedMemberEvent(guild, userId, habbo);
|
||||||
|
|||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
package com.eu.habbo.messages.incoming.guilds;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
class GuildMemberRemovalPermissionContractTest {
|
||||||
|
@Test
|
||||||
|
void regularAdminsCannotRemovePeerAdmins() throws Exception {
|
||||||
|
String source = Files.readString(Path.of("src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveMemberEvent.java"));
|
||||||
|
|
||||||
|
int targetLookup = source.indexOf("GuildMember targetMember =");
|
||||||
|
int peerAdminGuard = source.indexOf("targetMember.getRank().equals(GuildRank.ADMIN)", targetLookup);
|
||||||
|
int ownerCheck = source.indexOf("!actorIsGuildOwner", peerAdminGuard);
|
||||||
|
int globalCheck = source.indexOf("!actorIsGlobalGuildAdmin", ownerCheck);
|
||||||
|
int removeMember = source.indexOf("removeMember(guild, userId)", globalCheck);
|
||||||
|
|
||||||
|
assertTrue(targetLookup > -1, "member removal should load the target membership row");
|
||||||
|
assertTrue(peerAdminGuard > targetLookup, "member removal should detect admin targets");
|
||||||
|
assertTrue(ownerCheck > peerAdminGuard, "peer-admin removal must require guild owner");
|
||||||
|
assertTrue(globalCheck > ownerCheck, "peer-admin removal may also allow global guild admins");
|
||||||
|
assertTrue(removeMember > globalCheck, "target rank authorization must run before removal");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user