diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index 0008826e..ff6208b6 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -95,6 +95,9 @@ message.disable_stranger_chat false ##当禁止陌生人聊天时,允许聊天的用户id,比如管理员或者文件传输助手等。用户id以英文逗号分割。 message.allow_stranger_chat_list admin,FireRobot,wfc_file_transfer +##当禁止陌生人聊天时,允许聊天的线路。 +#message.allow_stranger_line 100,101 + ##黑名单策略,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 962cef2b..f60b2e81 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -152,6 +152,7 @@ public final class BrokerConstants { 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_Allow_Stranger_Line = "message.allow_stranger_line"; public static final String MESSAGE_Blacklist_Strategy = "message.blacklist.strategy"; public static final String MESSAGE_Blacklist_Allow_Send = "message.blacklist.allow_send_to_black"; diff --git a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java index 8542ba12..4ce6e798 100644 --- a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java @@ -152,7 +152,7 @@ public class SendMessageHandler extends IMHandler { if (message.getConversation().getType() == ProtoConstants.ConversationType.ConversationType_Private) { if(!m_messagesStore.getBlackListExceptionTypes().contains(message.getContent().getType())) { - errorCode = m_messagesStore.isAllowUserMessage(message.getConversation().getTarget(), fromUser); + errorCode = m_messagesStore.isAllowUserMessage(message.getConversation().getTarget(), fromUser, message.getConversation().getLine()); if (errorCode != ErrorCode.ERROR_CODE_SUCCESS) { if (errorCode == ErrorCode.ERROR_CODE_IN_BLACK_LIST && mBlacklistStrategy != ProtoConstants.BlacklistStrategy.Message_Reject) { ignoreMsg = true; diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index eb849858..134ccd2f 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -165,6 +165,7 @@ public class MemoryMessagesStore implements IMessagesStore { private boolean mMobileDefaultSilentWhenPCOnline = true; private boolean mDisableStrangerChat = false; private Set mAllowStrangerChatSet = new HashSet<>(); + private Set mAllowStrangerLineSet = new HashSet<>(); private boolean mDisableStrangerAddGroup = false; private boolean mIDUseUUID = true; @@ -265,6 +266,18 @@ public class MemoryMessagesStore implements IMessagesStore { e.printStackTrace(); } + try { + String allowStrangerList = m_Server.getConfig().getProperty(BrokerConstants.MESSAGE_Allow_Stranger_Line); + if(!StringUtil.isNullOrEmptyAfterTrim(allowStrangerList)) { + allowStrangerList = allowStrangerList.replace(",", ","); + for (String s : allowStrangerList.split(",")) { + mAllowStrangerLineSet.add(Integer.parseInt(s.trim())); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + try { String forcePushTypes = m_Server.getConfig().getProperty(BrokerConstants.MESSAGE_Force_Push_Types); if(!StringUtil.isNullOrEmptyAfterTrim(forcePushTypes)) { @@ -3196,7 +3209,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public ErrorCode isAllowUserMessage(String targetUser, String fromUser) { + public ErrorCode isAllowUserMessage(String targetUser, String fromUser, int line) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); MultiMap friendsMap = hzInstance.getMultiMap(USER_FRIENDS); @@ -3223,7 +3236,7 @@ public class MemoryMessagesStore implements IMessagesStore { if (mDisableStrangerChat) { //在禁止私聊时,是否是允许私聊的用户id - if(mAllowStrangerChatSet.contains(targetUser) || mAllowStrangerChatSet.contains(fromUser)) { + if(mAllowStrangerChatSet.contains(targetUser) || mAllowStrangerChatSet.contains(fromUser) || mAllowStrangerLineSet.contains(line)) { return ErrorCode.ERROR_CODE_SUCCESS; } diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index fbfa896f..6b123e8d 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -185,7 +185,7 @@ public interface IMessagesStore { ErrorCode blackUserRequest(String fromUser, String targetUserId, int status, long[] head); FriendData getFriendData(String fromUser, String targetUserId); ErrorCode SyncFriendRequestUnread(String userId, long unreadDt, long[] head); - ErrorCode isAllowUserMessage(String fromUser, String userId); + ErrorCode isAllowUserMessage(String fromUser, String userId, int line); ErrorCode isBlacked(String fromUser, String userId); ErrorCode setFriendAliasRequest(String fromUser, String targetUserId, String alias, long[] head); ErrorCode setFriendExtraRequest(String fromUser, String targetUserId, String extra, long[] head); diff --git a/distribution/src/main/resources/wildfirechat.conf b/distribution/src/main/resources/wildfirechat.conf index ede2ce2d..8f615786 100755 --- a/distribution/src/main/resources/wildfirechat.conf +++ b/distribution/src/main/resources/wildfirechat.conf @@ -93,6 +93,9 @@ message.disable_stranger_chat false ##当禁止陌生人聊天时,允许聊天的用户id,比如管理员或者文件传输助手等。用户id以英文逗号分割。 message.allow_stranger_chat_list admin,FireRobot,wfc_file_transfer +##当禁止陌生人聊天时,允许聊天的线路。 +#message.allow_stranger_line 100,101 + ##黑名单策略,0 发送失败,返回被拉黑的错误码;1 发送成功但消息被服务器直接丢弃 message.blacklist.strategy 0