diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index 4b2ddb10..b210ddc8 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -79,6 +79,9 @@ message.chatroom_remote_history_message 1 ##是否禁止陌生人聊天 message.disable_stranger_chat false +##当禁止陌生人聊天时,允许聊天的用户id,比如管理员或者文件传输助手等。用户id以英文逗号分割。 +message.allow_stranger_chat_list admin,FireRobot,wfc_file_transfer + ##黑名单策略,0 发送失败,返回被拉黑的错误码;1 发送成功但消息被服务器直接丢弃 message.blacklist.strategy 0 diff --git a/broker/src/main/java/io/moquette/BrokerConstants.java b/broker/src/main/java/io/moquette/BrokerConstants.java index 3088aebe..dda4f945 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -142,6 +142,7 @@ public final class BrokerConstants { public static final String MESSAGE_Max_Queue = "message.max_queue"; public static final String MESSAGE_Disable_Stranger_Chat = "message.disable_stranger_chat"; + public static final String MESSAGE_Allow_Stranger_Chat_List = "message.allow_stranger_chat_list"; public static final String MESSAGE_Blacklist_Strategy = "message.blacklist.strategy"; diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 5d084f8c..673eb471 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -142,6 +142,7 @@ public class MemoryMessagesStore implements IMessagesStore { private boolean mMultiPlatformNotification = false; private boolean mMobileDefaultSilentWhenPCOnline = true; private boolean mDisableStrangerChat = false; + private Set mAllowStrangerChatSet = new HashSet<>(); private long mChatroomParticipantIdleTime = 900000; private boolean mChatroomRejoinWhenActive = true; @@ -195,6 +196,18 @@ public class MemoryMessagesStore implements IMessagesStore { printMissConfigLog(MESSAGE_Disable_Stranger_Chat, mDisableStrangerChat + ""); } + try { + String allowStrangerList = m_Server.getConfig().getProperty(BrokerConstants.MESSAGE_Allow_Stranger_Chat_List); + if(!StringUtil.isNullOrEmptyAfterTrim(allowStrangerList)) { + allowStrangerList = allowStrangerList.replace(",", ","); + for (String s : allowStrangerList.split(",")) { + mAllowStrangerChatSet.add(s.trim()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + try { mMultiPlatformNotification = Boolean.parseBoolean(m_Server.getConfig().getProperty(BrokerConstants.SERVER_MULTI_PLATFROM_NOTIFICATION, "false")); } catch (Exception e) { @@ -2800,6 +2813,11 @@ public class MemoryMessagesStore implements IMessagesStore { if (mDisableStrangerChat) { + //在禁止私聊时,是否是允许私聊的用户id + if(mAllowStrangerChatSet.contains(targetUser)) { + return ErrorCode.ERROR_CODE_SUCCESS; + } + //在禁止私聊时,允许机器人,物联网设备及管理员进行私聊。 IMap mUserMap = hzInstance.getMap(USERS); WFCMessage.User target = mUserMap.get(targetUser); diff --git a/distribution/src/main/resources/wildfirechat.conf b/distribution/src/main/resources/wildfirechat.conf index 0aeba7fa..58b212dc 100755 --- a/distribution/src/main/resources/wildfirechat.conf +++ b/distribution/src/main/resources/wildfirechat.conf @@ -76,6 +76,9 @@ message.chatroom_remote_history_message 1 ##是否禁止陌生人聊天 message.disable_stranger_chat false +##当禁止陌生人聊天时,允许聊天的用户id,比如管理员或者文件传输助手等。用户id以英文逗号分割。 +message.allow_stranger_chat_list admin,FireRobot,wfc_file_transfer + ##黑名单策略,0 发送失败,返回被拉黑的错误码;1 发送成功但消息被服务器直接丢弃 message.blacklist.strategy 0