diff --git a/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java index 7f4e3d4e..78d56112 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java @@ -21,7 +21,7 @@ import java.util.List; public class GetGroupInfoHandler extends IMHandler { @Override public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.PullUserRequest request, Qos1PublishHandler.IMCallback callback) { - List infos = m_messagesStore.getGroupInfos(request.getRequestList()); + List infos = m_messagesStore.getGroupInfos(request.getRequestList(), fromUser, requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin); WFCMessage.PullGroupInfoResult result = WFCMessage.PullGroupInfoResult.newBuilder().addAllInfo(infos).build(); byte[] data = result.toByteArray(); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 8ca8f9b5..4a7230b4 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1886,7 +1886,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public List getGroupInfos(List requests) { + public List getGroupInfos(List requests, String fromUser, boolean isAdmin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); IMap mIMap = hzInstance.getMap(GROUPS_MAP); ArrayList out = new ArrayList<>(); @@ -1900,6 +1900,14 @@ public class MemoryMessagesStore implements IMessagesStore { } if (groupInfo != null && groupInfo.getUpdateDt() > request.getUpdateDt()) { + if(!isAdmin && !StringUtil.isNullOrEmpty(fromUser)) { + WFCMessage.GroupMember gm = getGroupMember(groupInfo.getTargetId(), fromUser); + if(gm == null) { + groupInfo = groupInfo.toBuilder().setMemberUpdateDt(-1).build(); + } else if(gm.getType() == GroupMemberType_Removed) { + groupInfo = groupInfo.toBuilder().setMemberUpdateDt(-groupInfo.getMemberUpdateDt()).build(); + } + } out.add(groupInfo); } } diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index cb07719e..24edb550 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -116,7 +116,7 @@ public interface IMessagesStore { ErrorCode modifyGroupInfo(String operator, String groupId, int modifyType, String value, boolean isAdmin); ErrorCode modifyGroupMemberAlias(String operator, String groupId, String alias, String memberId, boolean isAdmin); ErrorCode modifyGroupMemberExtra(String operator, String groupId, String extra, String memberId, boolean isAdmin); - List getGroupInfos(List requests); + List getGroupInfos(List requests, String fromUser, boolean isAdmin); WFCMessage.GroupInfo getGroupInfo(String groupId); Set getUserGroupIds(String userId); Set getCommonGroupIds(String userId1, String userId2);