From 41f62c635465908824f9b02324c83bd76cb9052f Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Sat, 14 Sep 2024 09:53:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=85=81=E8=AE=B8=E5=8F=91=E9=80=81=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=BB=99=E9=BB=91=E5=90=8D=E5=8D=95=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- broker/config/wildfirechat.conf | 3 +++ .../java/io/moquette/BrokerConstants.java | 1 + .../imhandler/SendMessageHandler.java | 14 +++++++++++ .../persistence/MemoryMessagesStore.java | 24 +++++++++++++++++++ .../java/io/moquette/spi/IMessagesStore.java | 1 + 5 files changed, 43 insertions(+) diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index 93c0f768..caafd10c 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -98,6 +98,9 @@ message.allow_stranger_chat_list admin,FireRobot,wfc_file_transfer ##黑名单策略,0 发送失败,返回被拉黑的错误码;1 发送成功但消息被服务器直接丢弃 message.blacklist.strategy 0 +##拉黑对方后,对方不能发送消息给你。这个开关确定拉黑对方后你还能不能给对方发送消息。 +message.blacklist.allow_send_to_black false + ##是否禁止服务器端消息搜索,该功能暂未实现。目前的影响是如果打开,则存储消息时不单独保存_searchable_content字段 message.disable_remote_search false diff --git a/broker/src/main/java/io/moquette/BrokerConstants.java b/broker/src/main/java/io/moquette/BrokerConstants.java index 140ac7ef..106d0b18 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -153,6 +153,7 @@ public final class BrokerConstants { public static final String MESSAGE_Allow_Stranger_Chat_List = "message.allow_stranger_chat_list"; public static final String MESSAGE_Blacklist_Strategy = "message.blacklist.strategy"; + public static final String MESSAGE_Blacklist_Allow_Send = "message.blacklist.allow_send_to_black"; public static final String MESSAGE_NO_Forward_Admin_Message = "message.no_forward_admin_message"; diff --git a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java index 3bdf2c12..8542ba12 100644 --- a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java @@ -37,6 +37,7 @@ public class SendMessageHandler extends IMHandler { private Set mForwardExcludeMessageTypes = new HashSet<>(); private String mMentionForwardUrl = null; private int mBlacklistStrategy = 0; //黑名单中时,0失败,1吞掉。 + private boolean mBlacklistAllowSend2Black = true; private boolean mNoForwardAdminMessage = false; private String mRemoteSensitiveServerUrl = null; @@ -69,6 +70,12 @@ public class SendMessageHandler extends IMHandler { e.printStackTrace(); Utility.printExecption(LOG, e); } + + try { + mBlacklistAllowSend2Black = Boolean.parseBoolean(mServer.getConfig().getProperty(BrokerConstants.MESSAGE_Blacklist_Allow_Send, "true")); + } catch (Exception e) { + } + try { mRemoteSensitiveServerUrl = mServer.getConfig().getProperty(BrokerConstants.SENSITIVE_Remote_Server_URL); if(!StringUtil.isNullOrEmpty(mRemoteSensitiveServerUrl)) { @@ -154,6 +161,13 @@ public class SendMessageHandler extends IMHandler { return errorCode; } } + + if(!mBlacklistAllowSend2Black) { + errorCode = m_messagesStore.isBlacked(fromUser, message.getConversation().getTarget()); + if (errorCode != ErrorCode.ERROR_CODE_SUCCESS) { + return errorCode; + } + } } userStatus = m_messagesStore.getUserStatus(message.getConversation().getTarget()); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 30c2200c..88e56d1a 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -3244,6 +3244,30 @@ public class MemoryMessagesStore implements IMessagesStore { return ErrorCode.ERROR_CODE_SUCCESS; } + @Override + public ErrorCode isBlacked(String fromUser, String userId) { + HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); + MultiMap friendsMap = hzInstance.getMultiMap(USER_FRIENDS); + + Collection friendDatas = friendsMap.get(fromUser); + + if (friendDatas == null || friendDatas.size() == 0) { + friendDatas = loadFriend(friendsMap, fromUser); + } + + for (FriendData friendData : friendDatas) { + if (friendData.getFriendUid().equals(userId)) { + if (friendData.getBlacked() == 1) { + return ErrorCode.ERROR_CODE_IN_BLACK_LIST; + } else { + break; + } + } + } + + return ErrorCode.ERROR_CODE_SUCCESS; + } + synchronized Collection loadFriend(MultiMap friendsMap, String userId) { Collection friends = databaseStore.getPersistFriends(userId); if (friends != null) { diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 2b7b5c32..fbfa896f 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -186,6 +186,7 @@ public interface IMessagesStore { FriendData getFriendData(String fromUser, String targetUserId); ErrorCode SyncFriendRequestUnread(String userId, long unreadDt, long[] head); ErrorCode isAllowUserMessage(String fromUser, String userId); + 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);