From ef4572304315a97a9b6311054899ffc5ee495524 Mon Sep 17 00:00:00 2001 From: heavyrain2012 Date: Tue, 7 Dec 2021 13:46:14 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E6=9C=BA=E5=99=A8=E4=BA=BA=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=BE=A4=E9=80=9A=E7=9F=A5=E7=9A=84?= =?UTF-8?q?=E5=BC=80=E5=85=B3=EF=BC=9B2=EF=BC=8C=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- broker/config/wildfirechat.conf | 3 +++ .../com/xiaoleilu/loServer/action/IMAction.java | 3 ++- .../xiaoleilu/loServer/action/RouteAction.java | 3 ++- .../loServer/action/admin/AdminAction.java | 3 ++- .../loServer/action/channel/ChannelAction.java | 3 ++- .../loServer/action/robot/RobotAction.java | 3 ++- .../main/java/io/moquette/BrokerConstants.java | 2 ++ .../io/moquette/imhandler/AddFriendHandler.java | 5 +++-- .../io/moquette/imhandler/AddGroupMember.java | 4 +++- .../imhandler/BlackListRequestHandler.java | 3 ++- .../imhandler/BroadcastMessageHandler.java | 3 ++- .../moquette/imhandler/ChannelListenMember.java | 5 +++-- .../moquette/imhandler/ChannelSearchHandler.java | 3 ++- .../moquette/imhandler/CreateChannelHandler.java | 5 +++-- .../moquette/imhandler/CreateGroupHandler.java | 12 ++++++++---- .../moquette/imhandler/DeleteFriendHandler.java | 3 ++- .../moquette/imhandler/DestroyUserHandler.java | 4 +++- .../io/moquette/imhandler/DisconnectHandler.java | 3 ++- .../moquette/imhandler/DismissGroupHandler.java | 11 ++++++++--- .../imhandler/DistroyChannelHandler.java | 8 +++++--- .../io/moquette/imhandler/FriendPullHandler.java | 3 ++- .../imhandler/FriendRequestPullHandler.java | 3 ++- .../imhandler/GetChannelInfoHandler.java | 3 ++- .../imhandler/GetChatroomInfoHandler.java | 3 ++- .../imhandler/GetChatroomMemberHandler.java | 3 ++- .../moquette/imhandler/GetGroupInfoHandler.java | 3 ++- .../imhandler/GetGroupMemberHandler.java | 3 ++- .../imhandler/GetMediaUploadTokenHandler.java | 3 ++- .../imhandler/GetQiniuUploadTokenHandler.java | 3 ++- .../io/moquette/imhandler/GetTokenHandler.java | 3 ++- .../moquette/imhandler/GetUserInfoHandler.java | 3 ++- .../imhandler/GetUserSettingHandler.java | 3 ++- .../imhandler/HandleFriendRequestHandler.java | 3 ++- .../java/io/moquette/imhandler/IMHandler.java | 12 ++++++------ .../moquette/imhandler/JoinChatroomHandler.java | 3 ++- .../moquette/imhandler/KickoffGroupMember.java | 10 +++++++--- .../imhandler/KickoffPCClientHandler.java | 2 +- .../imhandler/LoadRemoteMessagesHandler.java | 2 +- .../imhandler/ModifyChannelInfoHandler.java | 3 ++- .../imhandler/ModifyGroupAliasHandler.java | 11 ++++++++--- .../imhandler/ModifyGroupInfoHandler.java | 11 ++++++++--- .../imhandler/ModifyGroupMemberAliasHandler.java | 11 ++++++++--- .../imhandler/ModifyGroupMemberExtraHandler.java | 11 ++++++++--- .../moquette/imhandler/ModifyMyInfoHandler.java | 3 ++- .../imhandler/MultiCastMessageHandler.java | 3 ++- .../moquette/imhandler/PullMessageHandler.java | 2 +- .../imhandler/PutUserSettingHandler.java | 3 ++- .../moquette/imhandler/QuitChatroomHandler.java | 3 ++- .../io/moquette/imhandler/QuitGroupHandler.java | 11 ++++++++--- .../moquette/imhandler/RecallMessageHandler.java | 4 +++- .../imhandler/RecallMultiCastMessageHandler.java | 4 +++- .../java/io/moquette/imhandler/RouteHandler.java | 3 ++- .../moquette/imhandler/SendMessageHandler.java | 3 ++- .../imhandler/SetFriendAliasRequestHandler.java | 3 ++- .../imhandler/SetGroupManagerHandler.java | 11 ++++++++--- .../SyncFriendRequestUnreadHandler.java | 3 ++- .../imhandler/TransferChannelHandler.java | 3 ++- .../moquette/imhandler/TransferGroupHandler.java | 11 ++++++++--- .../imhandler/UploadDeviceTokenHandler.java | 2 +- .../io/moquette/imhandler/UserSearchHandler.java | 3 ++- .../persistence/MemoryMessagesStore.java | 16 ++++++++++++++-- .../io/moquette/persistence/ServerAPIHelper.java | 9 +++------ .../src/main/java/io/moquette/server/Server.java | 5 +++-- .../java/io/moquette/spi/IMessagesStore.java | 3 ++- .../io/moquette/spi/impl/ProtocolProcessor.java | 4 ++-- .../io/moquette/spi/impl/Qos1PublishHandler.java | 11 ++++++----- .../cn/wildfirechat/proto/ProtoConstants.java | 7 +++++++ .../src/main/resources/wildfirechat.conf | 3 +++ 68 files changed, 230 insertions(+), 107 deletions(-) diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index 7e5cccd8..f4b1488f 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -144,6 +144,9 @@ chatroom.create_when_not_exist true ## 是否允许客户端发送操作群的自定义群通知消息 group.allow_client_custom_operation_notification true +## 是否允许机器人发送操作群的自定义群通知消息 +group.allow_robot_custom_operation_notification true + ## 当群成员退出或者被移除时,是否同时给管理员和相关人员发送显式通知消息。 ## 0 不发送,1 退群时发送,2 踢人时发送,3 退群和踢人时都发送。 group.visible_quit_or_kickoff_notification 0 diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java index 67e70b42..8f0bdd11 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java @@ -9,6 +9,7 @@ package com.xiaoleilu.loServer.action; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.google.protobuf.InvalidProtocolBufferException; import com.xiaoleilu.loServer.annotation.HttpMethod; @@ -101,7 +102,7 @@ public class IMAction extends Action { ctx.executor().execute(command); }; } - }, false); + }, ProtoConstants.RequestSourceType.Request_From_User); return false; } } catch (InvalidProtocolBufferException e) { diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java index d551be6f..85a51abb 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java @@ -8,6 +8,7 @@ package com.xiaoleilu.loServer.action; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.google.protobuf.InvalidProtocolBufferException; import com.xiaoleilu.loServer.annotation.HttpMethod; @@ -134,7 +135,7 @@ public class RouteAction extends Action { ctx.executor().execute(command); }; } - }, false); + }, ProtoConstants.RequestSourceType.Request_From_User); return false; } } catch (InvalidProtocolBufferException e) { diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java index 624beba1..b22da561 100644 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java @@ -9,6 +9,7 @@ package com.xiaoleilu.loServer.action.admin; import cn.wildfirechat.common.APIPath; +import cn.wildfirechat.proto.ProtoConstants; import com.google.gson.Gson; import com.xiaoleilu.loServer.RestResult; import com.xiaoleilu.loServer.action.Action; @@ -132,6 +133,6 @@ abstract public class AdminAction extends Action { ctx.executor().execute(command); }; } - }, !noAdmin); + }, noAdmin ? ProtoConstants.RequestSourceType.Request_From_User : ProtoConstants.RequestSourceType.Request_From_Admin); } } diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java index fdf01eca..1e8541ba 100644 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java @@ -9,6 +9,7 @@ package com.xiaoleilu.loServer.action.channel; import cn.wildfirechat.common.IMExceptionEvent; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.google.gson.Gson; import com.xiaoleilu.loServer.RestResult; @@ -140,6 +141,6 @@ abstract public class ChannelAction extends Action { ctx.executor().execute(command); }; } - }, false, true); + }, ProtoConstants.RequestSourceType.Request_From_Channel); } } diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java index 9eeff045..c32cdc52 100644 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java @@ -9,6 +9,7 @@ package com.xiaoleilu.loServer.action.robot; import cn.wildfirechat.common.IMExceptionEvent; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.google.gson.Gson; import com.xiaoleilu.loServer.RestResult; @@ -146,6 +147,6 @@ abstract public class RobotAction extends Action { ctx.executor().execute(command); }; } - }, false, true); + }, ProtoConstants.RequestSourceType.Request_From_Robot); } } diff --git a/broker/src/main/java/io/moquette/BrokerConstants.java b/broker/src/main/java/io/moquette/BrokerConstants.java index 1ced4d77..91974b47 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -155,6 +155,8 @@ public final class BrokerConstants { public static final String GROUP_Allow_Client_Custom_Operation_Notification = "group.allow_client_custom_operation_notification"; + public static final String GROUP_Allow_Robot_Custom_Operation_Notification = "group.allow_robot_custom_operation_notificatio"; + public static final String GROUP_Visible_Quit_Kickoff_Notification = "group.visible_quit_or_kickoff_notification"; public static final String USER_HIDE_PROPERTIES = "user.hide_properties"; diff --git a/broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java b/broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java index 5b6886ae..383908ea 100644 --- a/broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java @@ -21,8 +21,9 @@ import static win.liyufan.im.IMTopic.HandleFriendRequestTopic; @Handler(IMTopic.AddFriendRequestTopic) public class AddFriendHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.AddFriendRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.AddFriendRequest request, Qos1PublishHandler.IMCallback callback) { long[] head = new long[1]; + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; ErrorCode errorCode = m_messagesStore.saveAddFriendRequest(fromUser, request, head, isAdmin); if (errorCode == ERROR_CODE_SUCCESS) { WFCMessage.User user = m_messagesStore.getUserInfo(request.getTargetUid()); @@ -30,7 +31,7 @@ public class AddFriendHandler extends GroupHandler publisher.publishNotification(IMTopic.NotifyFriendRequestTopic, request.getTargetUid(), head[0], fromUser, request.getReason()); } else if(user != null && user.getType() == ProtoConstants.UserType.UserType_Robot) { WFCMessage.HandleFriendRequest handleFriendRequest = WFCMessage.HandleFriendRequest.newBuilder().setTargetUid(fromUser).setStatus(ProtoConstants.FriendRequestStatus.RequestStatus_Accepted).build(); - mServer.onApiMessage(request.getTargetUid(), null, handleFriendRequest.toByteArray(), 0, fromUser, HandleFriendRequestTopic, false, false); + mServer.onApiMessage(request.getTargetUid(), null, handleFriendRequest.toByteArray(), 0, fromUser, HandleFriendRequestTopic, requestSourceType); } } return errorCode; diff --git a/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java b/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java index 4116513e..a7144805 100644 --- a/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java +++ b/broker/src/main/java/io/moquette/imhandler/AddGroupMember.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; import io.moquette.spi.impl.Qos1PublishHandler; @@ -21,7 +22,8 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; public class AddGroupMember extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.AddGroupMemberRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.AddGroupMemberRequest request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; ErrorCode errorCode = m_messagesStore.addGroupMembers(fromUser, isAdmin, request.getGroupId(), request.getAddedMemberList(), request.getExtra()); if (errorCode == ERROR_CODE_SUCCESS) { if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { diff --git a/broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java b/broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java index 02ae4529..f75b92a4 100644 --- a/broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.BlackListUserTopic) public class BlackListRequestHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.BlackUserRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.BlackUserRequest request, Qos1PublishHandler.IMCallback callback) { long[] head = new long[1]; ErrorCode errorCode = m_messagesStore.blackUserRequest(fromUser, request.getUid(), request.getStatus(), head); if (errorCode == ERROR_CODE_SUCCESS) { diff --git a/broker/src/main/java/io/moquette/imhandler/BroadcastMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/BroadcastMessageHandler.java index 22d13b59..82e151cf 100644 --- a/broker/src/main/java/io/moquette/imhandler/BroadcastMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/BroadcastMessageHandler.java @@ -25,8 +25,9 @@ import static cn.wildfirechat.proto.ProtoConstants.ContentType.Text; @Handler(value = IMTopic.BroadcastMessageTopic) public class BroadcastMessageHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.Message message, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.Message message, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = ErrorCode.ERROR_CODE_SUCCESS; + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; if (message != null) { if (!isAdmin) { //only admin can broadcast message return ErrorCode.ERROR_CODE_NOT_RIGHT; diff --git a/broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java b/broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java index 673fdb41..bb64745d 100644 --- a/broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java +++ b/broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -21,11 +22,11 @@ import static win.liyufan.im.UserSettingScope.kUserSettingListenedChannels; public class ChannelListenMember extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ListenChannel request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ListenChannel request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = m_messagesStore.listenChannel(fromUser, request.getChannelId(), request.getListen()>0); if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { WFCMessage.ModifyUserSettingReq modifyUserSettingReq = WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingListenedChannels).setKey(request.getChannelId()).setValue(request.getListen() > 0 ? "1" : "0").build(); - mServer.onApiMessage(fromUser, null, modifyUserSettingReq.toByteArray(), 0, fromUser, PutUserSettingTopic, false, false); + mServer.onApiMessage(fromUser, null, modifyUserSettingReq.toByteArray(), 0, fromUser, PutUserSettingTopic, requestSourceType); publisher.notifyChannelListenStatusChanged(m_messagesStore.getChannelInfo(request.getChannelId()), fromUser, request.getListen() > 0); } diff --git a/broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java b/broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java index cea54c4f..30904e4f 100644 --- a/broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import java.util.List; @Handler(IMTopic.ChannelSearchTopic) public class ChannelSearchHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.SearchUserRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.SearchUserRequest request, Qos1PublishHandler.IMCallback callback) { List users = m_messagesStore.searchChannel(request.getKeyword(), request.getFuzzy() > 0, request.getPage()); WFCMessage.SearchChannelResult.Builder builder = WFCMessage.SearchChannelResult.newBuilder(); builder.addAllChannel(users); diff --git a/broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java b/broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java index 8404691b..d2237d64 100644 --- a/broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.hazelcast.util.StringUtil; import io.moquette.spi.impl.Qos1PublishHandler; @@ -21,7 +22,7 @@ import static win.liyufan.im.UserSettingScope.kUserSettingMyChannels; @Handler(value = IMTopic.CreateChannelTopic) public class CreateChannelHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ChannelInfo request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ChannelInfo request, Qos1PublishHandler.IMCallback callback) { WFCMessage.ChannelInfo.Builder builder = request.toBuilder(); if (StringUtil.isNullOrEmpty(request.getTargetId())) { builder.setTargetId(m_messagesStore.getShortUUID()); @@ -40,7 +41,7 @@ public class CreateChannelHandler extends GroupHandler { if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { WFCMessage.ModifyUserSettingReq modifyUserSettingReq = WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingMyChannels).setKey(request.getTargetId()).setValue("1").build(); - mServer.onApiMessage(fromUser, null, modifyUserSettingReq.toByteArray(), 0, fromUser, PutUserSettingTopic, false, false); + mServer.onApiMessage(fromUser, null, modifyUserSettingReq.toByteArray(), 0, fromUser, PutUserSettingTopic, requestSourceType); byte[] data = request.getTargetId().getBytes(); ackPayload.ensureWritable(data.length).writeBytes(data); return ErrorCode.ERROR_CODE_SUCCESS; diff --git a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java index 979e02a1..74e99ca2 100644 --- a/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; import com.hazelcast.util.StringUtil; @@ -19,7 +20,7 @@ import win.liyufan.im.IMTopic; @Handler(value = IMTopic.CreateGroupTopic) public class CreateGroupHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.CreateGroupRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.CreateGroupRequest request, Qos1PublishHandler.IMCallback callback) { if (!StringUtil.isNullOrEmpty(request.getGroup().getGroupInfo().getTargetId())) { WFCMessage.GroupInfo existGroupInfo = m_messagesStore.getGroupInfo(request.getGroup().getGroupInfo().getTargetId()); @@ -27,15 +28,18 @@ public class CreateGroupHandler extends GroupHandler 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } WFCMessage.GroupInfo groupInfo = m_messagesStore.createGroup(fromUser, request.getGroup().getGroupInfo(), request.getGroup().getMembersList(), request.getMemberExtra(), isAdmin); - if (groupInfo != null) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(groupInfo.getTargetId(), fromUser, groupInfo.getName(), "").getCreateGroupNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java b/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java index f9cb30ac..2876f523 100644 --- a/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.DeleteFriendTopic) public class DeleteFriendHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { long[] head = new long[2]; ErrorCode errorCode = m_messagesStore.deleteFriend(fromUser, request.getId(), head); if (errorCode == ERROR_CODE_SUCCESS) { diff --git a/broker/src/main/java/io/moquette/imhandler/DestroyUserHandler.java b/broker/src/main/java/io/moquette/imhandler/DestroyUserHandler.java index 07469f47..9ce2f6cf 100644 --- a/broker/src/main/java/io/moquette/imhandler/DestroyUserHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/DestroyUserHandler.java @@ -9,6 +9,7 @@ package io.moquette.imhandler; import cn.wildfirechat.common.ErrorCode; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.persistence.MemorySessionStore; import io.moquette.spi.impl.Qos1PublishHandler; @@ -19,7 +20,8 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.DestroyUserTopic) public class DestroyUserHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; if (isAdmin) { mServer.getImBusinessScheduler().execute(()-> { m_sessionsStore.clearUserSession(fromUser); diff --git a/broker/src/main/java/io/moquette/imhandler/DisconnectHandler.java b/broker/src/main/java/io/moquette/imhandler/DisconnectHandler.java index 7ea18081..3a0de136 100644 --- a/broker/src/main/java/io/moquette/imhandler/DisconnectHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/DisconnectHandler.java @@ -9,6 +9,7 @@ package io.moquette.imhandler; import cn.wildfirechat.common.ErrorCode; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.hazelcast.util.StringUtil; import com.xiaoleilu.loServer.model.FriendData; @@ -21,7 +22,7 @@ import java.util.List; @Handler(value = IMTopic.ClearSessionTopic) public class DisconnectHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, Byte request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, Byte request, Qos1PublishHandler.IMCallback callback) { if (request == 8) { m_sessionsStore.cleanSession(fromUser, clientID); } else if(request == 1) { diff --git a/broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java index e69aa662..a21cf8c8 100644 --- a/broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java @@ -20,8 +20,9 @@ import static win.liyufan.im.IMTopic.DismissGroupTopic; @Handler(value = DismissGroupTopic) public class DismissGroupHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.DismissGroupRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.DismissGroupRequest request, Qos1PublishHandler.IMCallback callback) { WFCMessage.GroupInfo groupInfo = m_messagesStore.getGroupInfo(request.getGroupId()); + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; ErrorCode errorCode; if (groupInfo == null) { errorCode = m_messagesStore.dismissGroup(fromUser, request.getGroupId(), isAdmin); @@ -29,12 +30,16 @@ public class DismissGroupHandler extends GroupHandler 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } //send notify message first, then dismiss group - if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(groupInfo.getTargetId(), fromUser, null, "").getDismissGroupNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/DistroyChannelHandler.java b/broker/src/main/java/io/moquette/imhandler/DistroyChannelHandler.java index 38f48990..2d9d8a63 100644 --- a/broker/src/main/java/io/moquette/imhandler/DistroyChannelHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/DistroyChannelHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -20,11 +21,12 @@ import static win.liyufan.im.UserSettingScope.kUserSettingMyChannels; @Handler(value = IMTopic.DestroyChannelInfoTopic) public class DistroyChannelHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { - ErrorCode errorCode = m_messagesStore.distoryChannel(fromUser, request.getId()); + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; + ErrorCode errorCode = m_messagesStore.distoryChannel(fromUser, request.getId(), isAdmin); if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { WFCMessage.ModifyUserSettingReq modifyUserSettingReq = WFCMessage.ModifyUserSettingReq.newBuilder().setScope(kUserSettingMyChannels).setKey(request.getId()).setValue("0").build(); - mServer.onApiMessage(fromUser, null, modifyUserSettingReq.toByteArray(), 0, fromUser, PutUserSettingTopic, false, false); + mServer.onApiMessage(fromUser, null, modifyUserSettingReq.toByteArray(), 0, fromUser, PutUserSettingTopic, requestSourceType); } return errorCode; } diff --git a/broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java b/broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java index 28c9f04f..d4bc1ed1 100644 --- a/broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.hazelcast.util.StringUtil; import com.xiaoleilu.loServer.model.FriendData; @@ -21,7 +22,7 @@ import java.util.List; @Handler(IMTopic.FriendPullTopic) public class FriendPullHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) { List friendDatas = m_messagesStore.getFriendList(fromUser, clientID, request.getVersion()); WFCMessage.GetFriendsResult.Builder builder = WFCMessage.GetFriendsResult.newBuilder(); for (FriendData data : friendDatas diff --git a/broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java b/broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java index 327c7e95..477ae656 100644 --- a/broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import java.util.List; @Handler(IMTopic.FriendRequestPullTopic) public class FriendRequestPullHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) { List friendDatas = m_messagesStore.getFriendRequestList(fromUser, request.getVersion()); WFCMessage.GetFriendRequestResult.Builder builder = WFCMessage.GetFriendRequestResult.newBuilder(); builder.addAllEntry(friendDatas); diff --git a/broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java index dee07c52..d481f529 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -17,7 +18,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.ChannelPullTopic) public class GetChannelInfoHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.PullChannelInfo request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.PullChannelInfo request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = ErrorCode.ERROR_CODE_SUCCESS; WFCMessage.ChannelInfo info = m_messagesStore.getChannelInfo(request.getChannelId()); if (info == null) { diff --git a/broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java index b5be03d9..aed5dd21 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -17,7 +18,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.GetChatroomInfoTopic) public class GetChatroomInfoHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.GetChatroomInfoRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.GetChatroomInfoRequest request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = ErrorCode.ERROR_CODE_SUCCESS; WFCMessage.ChatroomInfo info = m_messagesStore.getChatroomInfo(request.getChatroomId()); if (info == null) { diff --git a/broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java b/broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java index e5e4b70a..91e3490e 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -17,7 +18,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.GetChatroomMemberTopic) public class GetChatroomMemberHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.GetChatroomMemberInfoRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.GetChatroomMemberInfoRequest request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = ErrorCode.ERROR_CODE_SUCCESS; WFCMessage.ChatroomMemberInfo info = m_messagesStore.getChatroomMemberInfo(request.getChatroomId(), request.getMaxCount()); if (info != null) { diff --git a/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java index 57eb0c65..7f4e3d4e 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import java.util.List; @Handler(IMTopic.GetGroupInfoTopic) public class GetGroupInfoHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.PullUserRequest request, Qos1PublishHandler.IMCallback callback) { + 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()); WFCMessage.PullGroupInfoResult result = WFCMessage.PullGroupInfoResult.newBuilder().addAllInfo(infos).build(); diff --git a/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java b/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java index cb18b016..4a83c51e 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -22,7 +23,7 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.GetGroupMemberTopic) public class GetGroupMemberHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.PullGroupMemberRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.PullGroupMemberRequest request, Qos1PublishHandler.IMCallback callback) { List members = new ArrayList<>(); ErrorCode errorCode = m_messagesStore.getGroupMembers(fromUser, request.getTarget(), request.getHead(), members); diff --git a/broker/src/main/java/io/moquette/imhandler/GetMediaUploadTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/GetMediaUploadTokenHandler.java index ec919005..3cea6be9 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetMediaUploadTokenHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetMediaUploadTokenHandler.java @@ -9,6 +9,7 @@ package io.moquette.imhandler; import cn.wildfirechat.common.ErrorCode; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.hazelcast.util.StringUtil; import com.qiniu.util.Auth; @@ -22,7 +23,7 @@ import static io.moquette.server.config.MediaServerConfig.FILE_STROAGE_REMOTE_SE @Handler("GMUT") public class GetMediaUploadTokenHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.GetUploadTokenRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.GetUploadTokenRequest request, Qos1PublishHandler.IMCallback callback) { int type = request.getMediaType(); String token; diff --git a/broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java index b4eb66b6..dc446d45 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.qiniu.util.Auth; import com.xiaoleilu.loServer.action.UploadFileAction; @@ -20,7 +21,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.GetQiniuUploadTokenTopic) public class GetQiniuUploadTokenHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, Byte request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, Byte request, Qos1PublishHandler.IMCallback callback) { int type = request; String token; diff --git a/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java index 2a555035..b11ee053 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.xiaoleilu.hutool.system.UserInfo; import io.moquette.persistence.MemorySessionStore; @@ -20,7 +21,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.GetTokenTopic) public class GetTokenHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.GetTokenRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.GetTokenRequest request, Qos1PublishHandler.IMCallback callback) { MemorySessionStore.Session session = m_sessionsStore.updateOrCreateUserSession(fromUser, clientID, request.getPlatform()); WFCMessage.User userInfo = m_messagesStore.getUserInfo(fromUser); if(userInfo != null && userInfo.getType() == 1) { diff --git a/broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java index 7c9116a4..a0836f6f 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.GetUserInfoTopic) public class GetUserInfoHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.PullUserRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.PullUserRequest request, Qos1PublishHandler.IMCallback callback) { WFCMessage.PullUserResult.Builder resultBuilder = WFCMessage.PullUserResult.newBuilder(); ErrorCode errorCode = m_messagesStore.getUserInfo(fromUser, request.getRequestList(), resultBuilder); diff --git a/broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java b/broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java index c85e5251..c73fec74 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.GetUserSettingTopic) public class GetUserSettingHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) { WFCMessage.GetUserSettingResult.Builder builder = WFCMessage.GetUserSettingResult.newBuilder(); ErrorCode errorCode = m_messagesStore.getUserSettings(fromUser, request.getVersion(), builder); if (errorCode == ERROR_CODE_SUCCESS) { diff --git a/broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java b/broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java index 52428e2e..82ef542c 100644 --- a/broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java @@ -25,10 +25,11 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.HandleFriendRequestTopic) public class HandleFriendRequestHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.HandleFriendRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.HandleFriendRequest request, Qos1PublishHandler.IMCallback callback) { WFCMessage.Message.Builder builder = WFCMessage.Message.newBuilder(); builder.setFromUser(request.getTargetUid()); long[] heads = new long[2]; + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; ErrorCode errorCode = m_messagesStore.handleFriendRequest(fromUser, request, builder, heads, isAdmin); if (errorCode == ERROR_CODE_SUCCESS) { diff --git a/broker/src/main/java/io/moquette/imhandler/IMHandler.java b/broker/src/main/java/io/moquette/imhandler/IMHandler.java index 4e4385b6..484830fa 100755 --- a/broker/src/main/java/io/moquette/imhandler/IMHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/IMHandler.java @@ -163,9 +163,9 @@ abstract public class IMHandler { } - public ErrorCode preAction(String clientID, String fromUser, String topic, Qos1PublishHandler.IMCallback callback, boolean isAdmin, boolean isRobotOrChannel) { + public ErrorCode preAction(String clientID, String fromUser, String topic, Qos1PublishHandler.IMCallback callback, ProtoConstants.RequestSourceType requestSourceType) { LOG.info("imHandler fromUser={}, clientId={}, topic={}", fromUser, clientID, topic); - if(!isAdmin && !isRobotOrChannel && !mLimitCounter.isGranted(clientID + fromUser + topic)) { + if(requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !mLimitCounter.isGranted(clientID + fromUser + topic)) { ByteBuf ackPayload = Unpooled.buffer(); ackPayload.ensureWritable(1).writeByte(ERROR_CODE_OVER_FREQUENCY.getCode()); try { @@ -179,7 +179,7 @@ abstract public class IMHandler { return ErrorCode.ERROR_CODE_SUCCESS; } - public void doHandler(String clientID, String fromUser, String topic, byte[] payloadContent, Qos1PublishHandler.IMCallback callback, boolean isAdmin, boolean isRobotOrChannel) { + public void doHandler(String clientID, String fromUser, String topic, byte[] payloadContent, Qos1PublishHandler.IMCallback callback, ProtoConstants.RequestSourceType requestSourceType) { m_imBusinessExecutor.execute(() -> { Qos1PublishHandler.IMCallback callbackWrapper = new Qos1PublishHandler.IMCallback() { @Override @@ -190,7 +190,7 @@ abstract public class IMHandler { } }; - ErrorCode preActionCode = preAction(clientID, fromUser, topic, callbackWrapper, isAdmin, isRobotOrChannel); + ErrorCode preActionCode = preAction(clientID, fromUser, topic, callbackWrapper, requestSourceType); if (preActionCode == ErrorCode.ERROR_CODE_SUCCESS) { ByteBuf ackPayload = Unpooled.buffer(1); @@ -199,7 +199,7 @@ abstract public class IMHandler { try { LOG.debug("execute handler for topic {}", topic); - errorCode = action(ackPayload, clientID, fromUser, isAdmin, getDataObject(payloadContent), callbackWrapper); + errorCode = action(ackPayload, clientID, fromUser, requestSourceType, getDataObject(payloadContent), callbackWrapper); } catch (IllegalAccessException e) { e.printStackTrace(); Utility.printExecption(LOG, e); @@ -241,7 +241,7 @@ abstract public class IMHandler { @ActionMethod - abstract public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, T request, Qos1PublishHandler.IMCallback callback) ; + abstract public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, T request, Qos1PublishHandler.IMCallback callback) ; public void afterAction(String clientID, String fromUser, String topic, Qos1PublishHandler.IMCallback callback) { diff --git a/broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java b/broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java index bf645e7e..87992e0c 100644 --- a/broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -18,7 +19,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.JoinChatroomTopic) public class JoinChatroomHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { return m_messagesStore.handleJoinChatroom(fromUser, clientID, request.getId()); } } diff --git a/broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java b/broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java index e613c0fe..489f2e50 100644 --- a/broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java +++ b/broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java @@ -22,12 +22,13 @@ import static win.liyufan.im.IMTopic.KickoffGroupMemberTopic; @Handler(value = KickoffGroupMemberTopic) public class KickoffGroupMember extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.RemoveGroupMemberRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.RemoveGroupMemberRequest request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode; WFCMessage.GroupInfo groupInfo = m_messagesStore.getGroupInfo(request.getGroupId()); if (groupInfo == null) { errorCode = ErrorCode.ERROR_CODE_NOT_EXIST; } else { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; boolean isAllow = isAdmin; if (!isAllow) { if (groupInfo.getOwner() != null) { @@ -50,12 +51,15 @@ public class KickoffGroupMember extends GroupHandler 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } //send notify message first, then kickoff the member - if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, null, request.getRemovedMemberList()).getKickokfMemberGroupNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/KickoffPCClientHandler.java b/broker/src/main/java/io/moquette/imhandler/KickoffPCClientHandler.java index a1c9a0c6..017e381d 100644 --- a/broker/src/main/java/io/moquette/imhandler/KickoffPCClientHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/KickoffPCClientHandler.java @@ -22,7 +22,7 @@ import static win.liyufan.im.IMTopic.KickoffPCClientTopic; @Handler(value = KickoffPCClientTopic) public class KickoffPCClientHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { String pcClientId = request.getId(); if (StringUtil.isNullOrEmpty(pcClientId)) { return ErrorCode.INVALID_PARAMETER; diff --git a/broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java b/broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java index 7ce4c820..dd2dc4b3 100644 --- a/broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java @@ -18,7 +18,7 @@ import win.liyufan.im.IMTopic; @Handler(value = IMTopic.LoadRemoteMessagesTopic) public class LoadRemoteMessagesHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.LoadRemoteMessages request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.LoadRemoteMessages request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = ErrorCode.ERROR_CODE_SUCCESS; long beforeUid = request.getBeforeUid(); diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java index f27bb885..1f444b70 100644 --- a/broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -18,7 +19,7 @@ import static win.liyufan.im.IMTopic.ModifyChannelInfoTopic; @Handler(value = ModifyChannelInfoTopic) public class ModifyChannelInfoHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyChannelInfo request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ModifyChannelInfo request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode= m_messagesStore.modifyChannelInfo(fromUser, request.getChannelId(), request.getType(), request.getValue()); return errorCode; } diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java index ff19218d..68b0dc08 100644 --- a/broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; import io.moquette.spi.impl.Qos1PublishHandler; @@ -20,14 +21,18 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.ModifyGroupAliasTopic) public class ModifyGroupAliasHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyGroupMemberAlias request, Qos1PublishHandler.IMCallback callback) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ModifyGroupMemberAlias request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } ErrorCode errorCode = m_messagesStore.modifyGroupMemberAlias(fromUser, request.getGroupId(), request.getAlias(), null, isAdmin); if (errorCode == ERROR_CODE_SUCCESS) { - if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, request.getAlias(), "").getModifyGroupMemberAliasNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java index 8675aae7..65f31dad 100644 --- a/broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; import io.moquette.spi.impl.Qos1PublishHandler; @@ -21,14 +22,18 @@ import static win.liyufan.im.IMTopic.ModifyGroupInfoTopic; @Handler(value = ModifyGroupInfoTopic) public class ModifyGroupInfoHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyGroupInfoRequest request, Qos1PublishHandler.IMCallback callback) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ModifyGroupInfoRequest request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } ErrorCode errorCode= m_messagesStore.modifyGroupInfo(fromUser, request.getGroupId(), request.getType(), request.getValue(), isAdmin); if (errorCode == ERROR_CODE_SUCCESS) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = null; diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberAliasHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberAliasHandler.java index 4e21c7cf..3f630336 100644 --- a/broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberAliasHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberAliasHandler.java @@ -10,6 +10,7 @@ package io.moquette.imhandler; import cn.wildfirechat.common.ErrorCode; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -20,14 +21,18 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.ModifyGroupMemberAliasTopic) public class ModifyGroupMemberAliasHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyGroupMemberAlias request, Qos1PublishHandler.IMCallback callback) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ModifyGroupMemberAlias request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } ErrorCode errorCode = m_messagesStore.modifyGroupMemberAlias(fromUser, request.getGroupId(), request.getAlias(), request.getMemberId(), isAdmin); if (errorCode == ERROR_CODE_SUCCESS) { - if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, request.getAlias(), request.getMemberId()).getModifyGroupMemberAliasNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberExtraHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberExtraHandler.java index 606cbfe1..62d74b1c 100644 --- a/broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberExtraHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberExtraHandler.java @@ -10,6 +10,7 @@ package io.moquette.imhandler; import cn.wildfirechat.common.ErrorCode; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -20,14 +21,18 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.ModifyGroupMemberExtraTopic) public class ModifyGroupMemberExtraHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyGroupMemberExtra request, Qos1PublishHandler.IMCallback callback) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ModifyGroupMemberExtra request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } ErrorCode errorCode = m_messagesStore.modifyGroupMemberExtra(fromUser, request.getGroupId(), request.getExtra(), request.getMemberId(), isAdmin); if (errorCode == ERROR_CODE_SUCCESS) { - if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if (request.hasNotifyContent()&& request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, request.getExtra(), request.getMemberId()).getModifyGroupMemberExtraNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java b/broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java index b0440031..860e85ad 100644 --- a/broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -18,7 +19,7 @@ import win.liyufan.im.Utility; @Handler(IMTopic.ModifyMyInfoTopic) public class ModifyMyInfoHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyMyInfoRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ModifyMyInfoRequest request, Qos1PublishHandler.IMCallback callback) { try { return m_messagesStore.modifyUserInfo(fromUser, request); } catch (Exception e) { diff --git a/broker/src/main/java/io/moquette/imhandler/MultiCastMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/MultiCastMessageHandler.java index 0b80430d..e0d31bc6 100644 --- a/broker/src/main/java/io/moquette/imhandler/MultiCastMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/MultiCastMessageHandler.java @@ -29,7 +29,8 @@ public class MultiCastMessageHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.PullMessageRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.PullMessageRequest request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = ErrorCode.ERROR_CODE_SUCCESS; if (request.getType() == ProtoConstants.PullType.Pull_ChatRoom && !m_messagesStore.checkUserClientInChatroom(fromUser, clientID, null)) { diff --git a/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java b/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java index 9b040390..4ad9b968 100644 --- a/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -17,7 +18,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.PutUserSettingTopic) public class PutUserSettingHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.ModifyUserSettingReq request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.ModifyUserSettingReq request, Qos1PublishHandler.IMCallback callback) { m_messagesStore.updateUserSettings(fromUser, request, clientID); return ErrorCode.ERROR_CODE_SUCCESS; } diff --git a/broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java b/broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java index 571be8e4..d47180a3 100644 --- a/broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -17,7 +18,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.QuitChatroomTopic) public class QuitChatroomHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) { m_messagesStore.handleQuitChatroom(fromUser, clientID, request.getId()); return ErrorCode.ERROR_CODE_SUCCESS; } diff --git a/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java index a7886dec..ae2b1388 100644 --- a/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; import io.moquette.spi.impl.Qos1PublishHandler; @@ -21,14 +22,18 @@ import static win.liyufan.im.IMTopic.QuitGroupTopic; @Handler(value = QuitGroupTopic) public class QuitGroupHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.QuitGroupRequest request, Qos1PublishHandler.IMCallback callback) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.QuitGroupRequest request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } ErrorCode errorCode = m_messagesStore.quitGroup(fromUser, request.getGroupId()); if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) { - if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, null, "").getQuitGroupNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java index 98e9d71f..7691633c 100644 --- a/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -20,7 +21,8 @@ import java.util.Set; @Handler(value = IMTopic.RecallMessageTopic) public class RecallMessageHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.INT64Buf int64Buf, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.INT64Buf int64Buf, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; ErrorCode errorCode = m_messagesStore.recallMessage(int64Buf.getId(), fromUser, clientID, isAdmin); if(errorCode != ErrorCode.ERROR_CODE_SUCCESS) { diff --git a/broker/src/main/java/io/moquette/imhandler/RecallMultiCastMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/RecallMultiCastMessageHandler.java index 7b31ed2e..d5d64748 100644 --- a/broker/src/main/java/io/moquette/imhandler/RecallMultiCastMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/RecallMultiCastMessageHandler.java @@ -9,6 +9,7 @@ package io.moquette.imhandler; import cn.wildfirechat.common.ErrorCode; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -17,7 +18,8 @@ import win.liyufan.im.IMTopic; @Handler(value = IMTopic.RecallMultiCastMessageTopic) public class RecallMultiCastMessageHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.RecallMultiCastMessageRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.RecallMultiCastMessageRequest request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; if (!isAdmin) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } diff --git a/broker/src/main/java/io/moquette/imhandler/RouteHandler.java b/broker/src/main/java/io/moquette/imhandler/RouteHandler.java index ae420cdf..840493bc 100644 --- a/broker/src/main/java/io/moquette/imhandler/RouteHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/RouteHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import com.hazelcast.core.Member; import io.moquette.persistence.MemorySessionStore; @@ -20,7 +21,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.RouteTopic) public class RouteHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.RouteRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.RouteRequest request, Qos1PublishHandler.IMCallback callback) { MemorySessionStore.Session session = m_sessionsStore.sessionForClientAndUser(fromUser, clientID); if (session == null) { ErrorCode errorCode = m_sessionsStore.loadActiveSession(fromUser, clientID); diff --git a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java index 69c6c634..c28d82dd 100644 --- a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java @@ -98,8 +98,9 @@ public class SendMessageHandler extends IMHandler { } @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.Message message, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.Message message, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = ErrorCode.ERROR_CODE_SUCCESS; + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; if (message != null) { boolean ignoreMsg = false; if (!isAdmin) { //admin do not check the right diff --git a/broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java b/broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java index 065a56cc..9814a155 100644 --- a/broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.SetFriendAliasTopic) public class SetFriendAliasRequestHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.AddFriendRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.AddFriendRequest request, Qos1PublishHandler.IMCallback callback) { long[] head = new long[1]; ErrorCode errorCode = m_messagesStore.setFriendAliasRequest(fromUser, request.getTargetUid(), request.getReason(), head); if (errorCode == ERROR_CODE_SUCCESS) { diff --git a/broker/src/main/java/io/moquette/imhandler/SetGroupManagerHandler.java b/broker/src/main/java/io/moquette/imhandler/SetGroupManagerHandler.java index 532cd509..bc655bc2 100644 --- a/broker/src/main/java/io/moquette/imhandler/SetGroupManagerHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SetGroupManagerHandler.java @@ -10,6 +10,7 @@ package io.moquette.imhandler; import cn.wildfirechat.common.ErrorCode; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -20,14 +21,18 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.SetGroupManagerTopic) public class SetGroupManagerHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.SetGroupManagerRequest request, Qos1PublishHandler.IMCallback callback) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.SetGroupManagerRequest request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } ErrorCode errorCode = m_messagesStore.setGroupManager(fromUser, request.getGroupId(), request.getType(), request.getUserIdList(), isAdmin); if (errorCode == ERROR_CODE_SUCCESS) { - if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, request.getType() + "", request.getUserIdList()).getSetGroupManagerNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java b/broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java index b2ddafe2..0f128d18 100644 --- a/broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.RriendRequestUnreadSyncTopic) public class SyncFriendRequestUnreadHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) { long[] head = new long[1]; ErrorCode errorCode = m_messagesStore.SyncFriendRequestUnread(fromUser, request.getVersion(), head); if (errorCode == ERROR_CODE_SUCCESS) { diff --git a/broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java b/broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java index be4aaaee..ce41e71e 100644 --- a/broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -17,7 +18,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.TransferChannelInfoTopic) public class TransferChannelHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.TransferChannel request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.TransferChannel request, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = m_messagesStore.transferChannel(fromUser, request.getChannelId(), request.getNewOwner()); return errorCode; } diff --git a/broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java b/broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java index 8afcb948..73860c78 100644 --- a/broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import cn.wildfirechat.pojos.GroupNotificationBinaryContent; import io.moquette.spi.impl.Qos1PublishHandler; @@ -20,14 +21,18 @@ import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS; @Handler(IMTopic.TransferGroupTopic) public class TransferGroupHandler extends GroupHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.TransferGroupRequest request, Qos1PublishHandler.IMCallback callback) { - if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && !isAdmin && !m_messagesStore.isAllowClientCustomGroupNotification()) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.TransferGroupRequest request, Qos1PublishHandler.IMCallback callback) { + boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin; + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !m_messagesStore.isAllowClientCustomGroupNotification()) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot && !m_messagesStore.isAllowRobotCustomGroupNotification()) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } ErrorCode errorCode = m_messagesStore.transferGroup(fromUser, request.getGroupId(), request.getNewOwner(), isAdmin); if (errorCode == ERROR_CODE_SUCCESS) { - if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) { + if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) { sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent()); } else { WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, null, request.getNewOwner()).getTransferGroupNotifyContent(); diff --git a/broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java index cd681911..f8b77742 100644 --- a/broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java @@ -20,7 +20,7 @@ import win.liyufan.im.IMTopic; @Handler(IMTopic.UploadDeviceTokenTopic) public class UploadDeviceTokenHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.UploadDeviceTokenRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.UploadDeviceTokenRequest request, Qos1PublishHandler.IMCallback callback) { MemorySessionStore.Session session = m_sessionsStore.getSession(clientID); session.setPlatform(request.getPlatform()); session.setAppName(request.getAppName()); diff --git a/broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java b/broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java index 35dc81f8..1cb30da1 100644 --- a/broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java @@ -8,6 +8,7 @@ package io.moquette.imhandler; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import io.moquette.spi.impl.Qos1PublishHandler; import io.netty.buffer.ByteBuf; @@ -19,7 +20,7 @@ import java.util.List; @Handler(IMTopic.UserSearchTopic) public class UserSearchHandler extends IMHandler { @Override - public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.SearchUserRequest request, Qos1PublishHandler.IMCallback callback) { + public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.SearchUserRequest request, Qos1PublishHandler.IMCallback callback) { List users = m_messagesStore.searchUser(request.getKeyword(), request.getFuzzy(), request.getPage()); WFCMessage.SearchUserResult.Builder builder = WFCMessage.SearchUserResult.newBuilder(); builder.addAllEntry(users); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index c45498b1..ddad1144 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -157,6 +157,7 @@ public class MemoryMessagesStore implements IMessagesStore { private String mChatroomInfoUpdateCallback; private String mChatroomMemberUpdateCallback; private boolean mGroupAllowClientCustomOperationNotification; + private boolean mGroupAllowRobotCustomOperationNotification; private int mGroupVisibleQuitKickoffNotification; private int mSyncDataPartSize = 0; @@ -401,6 +402,12 @@ public class MemoryMessagesStore implements IMessagesStore { } + try { + mGroupAllowRobotCustomOperationNotification = Boolean.parseBoolean(server.getConfig().getProperty(GROUP_Allow_Robot_Custom_Operation_Notification)); + } catch (Exception e) { + + } + try { mGroupVisibleQuitKickoffNotification = Integer.parseInt(server.getConfig().getProperty(GROUP_Visible_Quit_Kickoff_Notification, "0")); } catch (Exception e) { @@ -3652,7 +3659,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public ErrorCode distoryChannel(String operator, String channelId) { + public ErrorCode distoryChannel(String operator, String channelId, boolean isAdmin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); IMap mIMap = hzInstance.getMap(CHANNELS); @@ -3662,7 +3669,7 @@ public class MemoryMessagesStore implements IMessagesStore { return ErrorCode.ERROR_CODE_NOT_EXIST; } - if (oldInfo.getOwner() == null || !oldInfo.getOwner().equals(operator)) { + if ((oldInfo.getOwner() == null || !oldInfo.getOwner().equals(operator)) && !isAdmin) { return ErrorCode.ERROR_CODE_NOT_RIGHT; } @@ -3798,6 +3805,11 @@ public class MemoryMessagesStore implements IMessagesStore { return mGroupAllowClientCustomOperationNotification; } + @Override + public boolean isAllowRobotCustomGroupNotification() { + return mGroupAllowRobotCustomOperationNotification; + } + @Override public int getVisibleQuitKickoffNotification() { return mGroupVisibleQuitKickoffNotification; diff --git a/broker/src/main/java/io/moquette/persistence/ServerAPIHelper.java b/broker/src/main/java/io/moquette/persistence/ServerAPIHelper.java index a7c5abe0..abee1593 100644 --- a/broker/src/main/java/io/moquette/persistence/ServerAPIHelper.java +++ b/broker/src/main/java/io/moquette/persistence/ServerAPIHelper.java @@ -8,6 +8,7 @@ package io.moquette.persistence; +import cn.wildfirechat.proto.ProtoConstants; import io.moquette.persistence.remote.*; import io.moquette.server.Server; import org.slf4j.Logger; @@ -37,11 +38,7 @@ public class ServerAPIHelper { Executor getResponseExecutor(); } - public static void sendRequest(String fromUser, String clientId, String request, byte[] message, Callback callback, boolean isAdmin) { - sendRequest(fromUser, clientId, request, message, callback, isAdmin, false); - } - - public static void sendRequest(String fromUser, String clientId, String request, byte[] message, Callback callback, boolean isAdmin, boolean isRobotOrChannel) { + public static void sendRequest(String fromUser, String clientId, String request, byte[] message, Callback callback, ProtoConstants.RequestSourceType requestSourceType) { int requestId = 0; if (callback != null) { @@ -54,7 +51,7 @@ public class ServerAPIHelper { requestMap.put(requestId, new RequestInfo(fromUser, clientId, callback, message, requestId, request)); } - server.onApiMessage(fromUser, clientId, message, requestId, "", request, isAdmin, isRobotOrChannel); + server.onApiMessage(fromUser, clientId, message, requestId, "", request, requestSourceType); } public static void sendResponse(int errorCode, byte[] message, String toUuid, int requestId) { diff --git a/broker/src/main/java/io/moquette/server/Server.java b/broker/src/main/java/io/moquette/server/Server.java index a42d37bb..40fbbb1e 100755 --- a/broker/src/main/java/io/moquette/server/Server.java +++ b/broker/src/main/java/io/moquette/server/Server.java @@ -16,6 +16,7 @@ package io.moquette.server; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.push.PushServer; import cn.wildfirechat.server.ThreadPoolExecutorWrapper; import com.hazelcast.config.ClasspathXmlConfig; @@ -430,9 +431,9 @@ public class Server { return hazelcastInstance; } - public void onApiMessage(String fromUser, String clientId, byte[] message, int messageId, String from, String request, boolean isAdmin, boolean isRobotOrChannel) { + public void onApiMessage(String fromUser, String clientId, byte[] message, int messageId, String from, String request, ProtoConstants.RequestSourceType requestSourceType) { LOG.debug("onApiMessage"); - m_processor.onApiMessage(fromUser, clientId, message, messageId, from, request, isAdmin, isRobotOrChannel); + m_processor.onApiMessage(fromUser, clientId, message, messageId, from, request, requestSourceType); } public boolean isShutdowning() { diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index dafb089e..97f11f05 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -206,7 +206,7 @@ public interface IMessagesStore { void clearUserChannels(String userId); ErrorCode modifyChannelInfo(String operator, String channelId, int modifyType, String value); ErrorCode transferChannel(String operator, String channelId, String newOwner); - ErrorCode distoryChannel(String operator, String channelId); + ErrorCode distoryChannel(String operator, String channelId, boolean isAdmin); List searchChannel(String keyword, boolean buzzy, int page); ErrorCode listenChannel(String operator, String channelId, boolean listen); WFCMessage.ChannelInfo getChannelInfo(String channelId); @@ -221,6 +221,7 @@ public interface IMessagesStore { WFCMessage.Message getMessage(long messageId); boolean isAllowClientCustomGroupNotification(); + boolean isAllowRobotCustomGroupNotification(); int getVisibleQuitKickoffNotification(); List getClientForbiddenSendTypes(); diff --git a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java index 66680b65..0c6b56f8 100755 --- a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java +++ b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java @@ -698,13 +698,13 @@ public class ProtocolProcessor { return m_sessionsStore; } - public void onApiMessage(String fromUser, String clientId, byte[] message, int messageId, String from, String request, boolean isAdmin, boolean isRobotOrChannel) { + public void onApiMessage(String fromUser, String clientId, byte[] message, int messageId, String from, String request, ProtoConstants.RequestSourceType requestSourceType) { if(request.equals(ServerAPIHelper.KICKOFF_USER_REQUEST)) { String userId = new String(message); mServer.getImBusinessScheduler().execute(()-> kickoffUserOffline(userId)); return; } - qos1PublishHandler.onApiMessage(fromUser, clientId, message, messageId, from, request, isAdmin, isRobotOrChannel); + qos1PublishHandler.onApiMessage(fromUser, clientId, message, messageId, from, request, requestSourceType); } public void shutdown() { messagesPublisher.stopChatroomScheduler(); diff --git a/broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java b/broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java index c0fae6ba..b751d0c0 100755 --- a/broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java +++ b/broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.util.*; import java.util.zip.GZIPOutputStream; +import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.server.ThreadPoolExecutorWrapper; import com.google.gson.Gson; import com.xiaoleilu.loServer.action.ClassUtil; @@ -103,7 +104,7 @@ public class Qos1PublishHandler extends QosPublishHandler { } } - public void onApiMessage(String fromUser, String clientId, byte[] message, int requestId, String from, String request, boolean isAdmin, boolean isRobotOrChannel) { + public void onApiMessage(String fromUser, String clientId, byte[] message, int requestId, String from, String request, ProtoConstants.RequestSourceType requestSourceType) { if (request.equals(ServerAPIHelper.CHECK_USER_ONLINE_REQUEST)) { checkUserOnlineHandler(message, ackPayload -> ServerAPIHelper.sendResponse(ERROR_CODE_SUCCESS.getCode(), ackPayload, from, requestId)); } else { @@ -114,7 +115,7 @@ public class Qos1PublishHandler extends QosPublishHandler { ReferenceCountUtil.release(ackPayload); ServerAPIHelper.sendResponse(errorCode.getCode(), response, from, requestId); } - }, isAdmin, isRobotOrChannel); + }, requestSourceType); } } @@ -145,7 +146,7 @@ public class Qos1PublishHandler extends QosPublishHandler { }); } - void imHandler(String clientID, String fromUser, String topic, byte[] payloadContent, IMCallback callback, boolean isAdmin, boolean isRobotOrChannel) { + void imHandler(String clientID, String fromUser, String topic, byte[] payloadContent, IMCallback callback, ProtoConstants.RequestSourceType requestSourceType) { LOG.info("imHandler fromUser={}, topic={}", fromUser, topic); IMCallback wrapper = (errorcode, ackPayload) -> { ackPayload.resetReaderIndex(); @@ -201,7 +202,7 @@ public class Qos1PublishHandler extends QosPublishHandler { IMHandler handler = m_imHandlers.get(topic); if (handler != null) { - handler.doHandler(clientID, fromUser, topic, payloadContent, wrapper, isAdmin, isRobotOrChannel); + handler.doHandler(clientID, fromUser, topic, payloadContent, wrapper, requestSourceType); } else { LOG.error("imHandler unknown topic={}", topic); ByteBuf ackPayload = Unpooled.buffer(); @@ -247,7 +248,7 @@ public class Qos1PublishHandler extends QosPublishHandler { MemorySessionStore.Session session = m_sessionStore.getSession(clientID); payloadContent = AES.AESDecrypt(payloadContent, session.getSecret(), true); - imHandler(clientID, username, imtopic, payloadContent, (errorCode, ackPayload) -> sendPubAck(clientID, messageID, ackPayload, errorCode), false, false); + imHandler(clientID, username, imtopic, payloadContent, (errorCode, ackPayload) -> sendPubAck(clientID, messageID, ackPayload, errorCode), ProtoConstants.RequestSourceType.Request_From_User); } private void sendPubAck(String clientId, int messageID, ByteBuf payload, ErrorCode errorCode) { diff --git a/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java b/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java index f02c6af4..5950ad8f 100644 --- a/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java +++ b/common/src/main/java/cn/wildfirechat/proto/ProtoConstants.java @@ -221,6 +221,13 @@ public class ProtoConstants { int Update_User_Name = 0x200; } + public enum RequestSourceType { + Request_From_User, + Request_From_Admin, + Request_From_Robot, + Request_From_Channel; + } + public static final int MESSAGE_CONTENT_TYPE_CREATE_GROUP = 104; public static final int MESSAGE_CONTENT_TYPE_ADD_GROUP_MEMBER = 105; public static final int MESSAGE_CONTENT_TYPE_KICKOF_GROUP_MEMBER = 106; diff --git a/distribution/src/main/resources/wildfirechat.conf b/distribution/src/main/resources/wildfirechat.conf index 77187f9d..89475023 100755 --- a/distribution/src/main/resources/wildfirechat.conf +++ b/distribution/src/main/resources/wildfirechat.conf @@ -139,6 +139,9 @@ chatroom.create_when_not_exist true ## 是否允许客户端发送操作群的自定义群通知消息 group.allow_client_custom_operation_notification true +## 是否允许机器人发送操作群的自定义群通知消息 +group.allow_robot_custom_operation_notification true + ## 当群成员退出或者被移除时,是否同时给管理员和相关人员发送显式通知消息。 ## 0 不发送,1 退群时发送,2 踢人时发送,3 退群和踢人时都发送。 ## 如果应用需要退群或者踢人不通知普通成员,请设置此参数为3,然后修改客户端踢人或退群消息的flag为not_presist。