Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a10412940 | ||
|
|
8e3100e5b7 | ||
|
|
c17a5be171 | ||
|
|
7727fad4dc | ||
|
|
dd5b9b1847 | ||
|
|
92c3c98553 | ||
|
|
d13ed6f989 | ||
|
|
4e6188ee32 | ||
|
|
a183d30f89 | ||
|
|
3f4c2b0cea | ||
|
|
932ee9235f | ||
|
|
1e5ac9b787 | ||
|
|
ad5d4991c8 | ||
|
|
a2ee6c87eb | ||
|
|
30e01a7040 |
@@ -123,6 +123,9 @@ message.group_mute_exception_types 401,402,403,404,405,407,408,410,411
|
|||||||
## 用户被全局禁言时允许发送的消息类型
|
## 用户被全局禁言时允许发送的消息类型
|
||||||
message.global_mute_exception_types 401,402,403,404,405,407,408,410,411
|
message.global_mute_exception_types 401,402,403,404,405,407,408,410,411
|
||||||
|
|
||||||
|
## 离线用户推送过期天数,0是永不过期,建议配置为7天。
|
||||||
|
message.push_expired_days 7
|
||||||
|
|
||||||
## 消息转发功能开启时,开关是否不转发server api接口消息。
|
## 消息转发功能开启时,开关是否不转发server api接口消息。
|
||||||
## 当为true时,不转发server api发送的消息;当为false时,转发server api发送的消息。
|
## 当为true时,不转发server api发送的消息;当为false时,转发server api发送的消息。
|
||||||
message.no_forward_admin_message false
|
message.no_forward_admin_message false
|
||||||
@@ -166,6 +169,12 @@ chatroom.rejoin_when_active true
|
|||||||
## 当一个聊天室不存在时,如果有用户加入就自动创建
|
## 当一个聊天室不存在时,如果有用户加入就自动创建
|
||||||
chatroom.create_when_not_exist true
|
chatroom.create_when_not_exist true
|
||||||
|
|
||||||
|
## 是否允许群主不受限制地撤回自己发送的消息。false可以${message.recall_time_limit}撤回自己的消息;true可以撤回任意时间自己的消息。默认为true。
|
||||||
|
group.allow_owner_recall_self_msg true
|
||||||
|
|
||||||
|
## 是否允许群管理员不受限制地撤回自己发送的消息。false可以${message.recall_time_limit}撤回自己的消息;true可以撤回任意时间自己的消息。默认为false。
|
||||||
|
group.allow_manager_recall_self_msg false
|
||||||
|
|
||||||
## 是否允许客户端发送操作群的自定义群通知消息
|
## 是否允许客户端发送操作群的自定义群通知消息
|
||||||
group.allow_client_custom_operation_notification true
|
group.allow_client_custom_operation_notification true
|
||||||
|
|
||||||
@@ -357,10 +366,12 @@ push.ios.server.address http://localhost:8085/ios/push
|
|||||||
#*********************************************************************
|
#*********************************************************************
|
||||||
# Sensitive configuration
|
# Sensitive configuration
|
||||||
#*********************************************************************
|
#*********************************************************************
|
||||||
## 内置文本敏感词过滤处理方法,0 发送失败;1 发送成功但消息被服务器直接丢弃;2 命中的敏感词被替换成***;3 记录并继续发送
|
## 内置文本敏感词过滤处理方法,当命中敏感词后,消息会被记录到t_sensitive_messages表中,然后根据type类型做不同的处理,处理方式如下:
|
||||||
|
## 0 发送失败;1 发送成功但消息被服务器直接丢弃;2 命中的敏感词被替换成***然后正常发送;3 正常发送。
|
||||||
|
## 如果开启 message.sensitive.forward.url 配置,命中敏感词的消息还会被回调到这个地址
|
||||||
sensitive.filter.type 0
|
sensitive.filter.type 0
|
||||||
|
|
||||||
## 如果内置敏感词库无法满足您的需求,可以自己开发部署敏感词审核服务。配置如下地址和消息类型,IM服务会把指定消息类型的消息回调到指定地址
|
## 如果内置敏感词库无法满足您的需求,可以开发部署独立敏感词审核服务。配置如下地址和消息类型,IM服务会把指定消息类型的消息回调到指定地址,内置的敏感词审核和敏感词转发功能就不再起作用了。
|
||||||
## 审核服务返回状态码200表示继续发送,如果需要替换内容,返回状态码200并且内容为替换后的内容。返回403表示不允许发送。其它错误继续发送。
|
## 审核服务返回状态码200表示继续发送,如果需要替换内容,返回状态码200并且内容为替换后的内容。返回403表示不允许发送。其它错误继续发送。
|
||||||
## 独立审核服务地址,IM服务会post SendMessageData。如果需要修改消息内容,返回 MessagePayload。请参考应用服务中 "/message/censor" Mapping.
|
## 独立审核服务地址,IM服务会post SendMessageData。如果需要修改消息内容,返回 MessagePayload。请参考应用服务中 "/message/censor" Mapping.
|
||||||
#sensitive.remote_server_url http://192.168.3.202:8888/message/censor
|
#sensitive.remote_server_url http://192.168.3.202:8888/message/censor
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<relativePath>../</relativePath>
|
<relativePath>../</relativePath>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.1.7</version>
|
<version>1.1.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>moquette-broker</artifactId>
|
<artifactId>moquette-broker</artifactId>
|
||||||
|
|||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <[email protected]>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.xiaoleilu.loServer.action.admin;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.APIPath;
|
||||||
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.pojos.InputGetUserGroupByType;
|
||||||
|
import cn.wildfirechat.pojos.InputUserId;
|
||||||
|
import cn.wildfirechat.pojos.OutputGroupIds;
|
||||||
|
import com.xiaoleilu.loServer.RestResult;
|
||||||
|
import com.xiaoleilu.loServer.annotation.HttpMethod;
|
||||||
|
import com.xiaoleilu.loServer.annotation.Route;
|
||||||
|
import com.xiaoleilu.loServer.handler.Request;
|
||||||
|
import com.xiaoleilu.loServer.handler.Response;
|
||||||
|
import io.netty.handler.codec.http.FullHttpRequest;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Route(APIPath.Get_User_Groups_By_Type)
|
||||||
|
@HttpMethod("POST")
|
||||||
|
public class GetUserGroupsByTypeAction extends AdminAction {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTransactionAction() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean action(Request request, Response response) {
|
||||||
|
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
||||||
|
InputGetUserGroupByType input = getRequestBody(request.getNettyRequest(), InputGetUserGroupByType.class);
|
||||||
|
if (input != null
|
||||||
|
&& (!StringUtil.isNullOrEmpty(input.getUserId()))) {
|
||||||
|
|
||||||
|
Set<String> groupIds = messagesStore.getUserGroupIds(input.getUserId(), input.getGroupMemberTypes());
|
||||||
|
OutputGroupIds outputGroupIds = new OutputGroupIds();
|
||||||
|
outputGroupIds.setGroupIds(new ArrayList<>(groupIds));
|
||||||
|
RestResult result = RestResult.ok(outputGroupIds);
|
||||||
|
setResponseContent(result, response);
|
||||||
|
} else {
|
||||||
|
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -153,6 +153,8 @@ public final class BrokerConstants {
|
|||||||
|
|
||||||
public static final String MESSAGE_NO_Forward_Admin_Message = "message.no_forward_admin_message";
|
public static final String MESSAGE_NO_Forward_Admin_Message = "message.no_forward_admin_message";
|
||||||
|
|
||||||
|
public static final String MESSAGE_Push_Expired_Days = "message.push_expired_days";
|
||||||
|
|
||||||
public static final String MESSAGE_Forward_With_Client_Info = "message.forward_with_client_info";
|
public static final String MESSAGE_Forward_With_Client_Info = "message.forward_with_client_info";
|
||||||
public static final String ROBOT_Callback_With_Client_Info = "robot.callback_with_client_info";
|
public static final String ROBOT_Callback_With_Client_Info = "robot.callback_with_client_info";
|
||||||
public static final String CHANNEL_Callback_With_Client_Info = "channel.callback_with_client_info";
|
public static final String CHANNEL_Callback_With_Client_Info = "channel.callback_with_client_info";
|
||||||
@@ -171,6 +173,8 @@ public final class BrokerConstants {
|
|||||||
public static final String CHATROOM_Create_When_Not_Exist = "chatroom.create_when_not_exist";
|
public static final String CHATROOM_Create_When_Not_Exist = "chatroom.create_when_not_exist";
|
||||||
|
|
||||||
|
|
||||||
|
public static final String GROUP_Allow_Owner_Recall_Self_Msg = "group.allow_owner_recall_self_msg";
|
||||||
|
public static final String GROUP_Allow_Manager_Recall_Self_Msg = "group.allow_manager_recall_self_msg";
|
||||||
public static final String GROUP_Allow_Client_Custom_Operation_Notification = "group.allow_client_custom_operation_notification";
|
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_Allow_Robot_Custom_Operation_Notification = "group.allow_robot_custom_operation_notificatio";
|
||||||
|
|
||||||
|
|||||||
@@ -1845,6 +1845,45 @@ public class DatabaseStore {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set<String> getUserGroupIds(String userId, List<Integer> memberTypes) {
|
||||||
|
Connection connection = null;
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
try {
|
||||||
|
connection = DBUtil.getConnection();
|
||||||
|
String sql = "select _gid from t_group_member where _mid = ? ";
|
||||||
|
if(!memberTypes.isEmpty()) {
|
||||||
|
sql += " and _type in (";
|
||||||
|
for (int i = 0; i < memberTypes.size(); i++) {
|
||||||
|
if(i > 0) {
|
||||||
|
sql += ",";
|
||||||
|
}
|
||||||
|
sql += memberTypes.get(i);
|
||||||
|
}
|
||||||
|
sql += ")";
|
||||||
|
}
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
|
||||||
|
statement.setString(1, userId);
|
||||||
|
|
||||||
|
rs = statement.executeQuery();
|
||||||
|
Set<String> out = new HashSet<>();
|
||||||
|
while (rs.next()) {
|
||||||
|
String uid = rs.getString(1);
|
||||||
|
out.add(uid);
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
Utility.printExecption(LOG, e, RDBS_Exception);
|
||||||
|
} finally {
|
||||||
|
DBUtil.closeDB(connection, statement, rs);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Set<String> getCommonGroupIds(String userId1, String userId2) {
|
Set<String> getCommonGroupIds(String userId1, String userId2) {
|
||||||
Connection connection = null;
|
Connection connection = null;
|
||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
|
|||||||
@@ -137,6 +137,13 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
private ConcurrentHashMap<String, Boolean> userPushHiddenDetail = new ConcurrentHashMap<>();
|
private ConcurrentHashMap<String, Boolean> userPushHiddenDetail = new ConcurrentHashMap<>();
|
||||||
private ConcurrentHashMap<String, Boolean> userConvSlientMap = new ConcurrentHashMap<>();
|
private ConcurrentHashMap<String, Boolean> userConvSlientMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
private LinkedHashMap<String, Long> repeatFriendRequest = new LinkedHashMap<String, Long>() {
|
||||||
|
@Override
|
||||||
|
protected boolean removeEldestEntry(Map.Entry<String, Long> eldest) {
|
||||||
|
return System.currentTimeMillis() - eldest.getValue() > 5 * 60 * 1000;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private boolean mDisableSearch = false;
|
private boolean mDisableSearch = false;
|
||||||
private boolean mDisableNicknameSearch = false;
|
private boolean mDisableNicknameSearch = false;
|
||||||
private boolean mDisableFriendRequest = false;
|
private boolean mDisableFriendRequest = false;
|
||||||
@@ -145,6 +152,8 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
private long mFriendRequestExpiration = 7 * 24 * 60 * 60 * 1000;
|
private long mFriendRequestExpiration = 7 * 24 * 60 * 60 * 1000;
|
||||||
private boolean mFriendRobotAutoAccept = true;
|
private boolean mFriendRobotAutoAccept = true;
|
||||||
|
|
||||||
|
private long mPushExpiredTimes = 604800000L;
|
||||||
|
|
||||||
private boolean mMultiPlatformNotification = false;
|
private boolean mMultiPlatformNotification = false;
|
||||||
private boolean mMobileDefaultSilentWhenPCOnline = true;
|
private boolean mMobileDefaultSilentWhenPCOnline = true;
|
||||||
private boolean mDisableStrangerChat = false;
|
private boolean mDisableStrangerChat = false;
|
||||||
@@ -171,6 +180,8 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
private String mChannelInfoUpdateCallback;
|
private String mChannelInfoUpdateCallback;
|
||||||
private String mChatroomInfoUpdateCallback;
|
private String mChatroomInfoUpdateCallback;
|
||||||
private String mChatroomMemberUpdateCallback;
|
private String mChatroomMemberUpdateCallback;
|
||||||
|
private boolean mGroupAllowOwnerRecallSelfMsg = false;
|
||||||
|
private boolean mGroupAllowManagerRecallSelfMsg = false;
|
||||||
private boolean mGroupAllowClientCustomOperationNotification;
|
private boolean mGroupAllowClientCustomOperationNotification;
|
||||||
private boolean mGroupAllowRobotCustomOperationNotification;
|
private boolean mGroupAllowRobotCustomOperationNotification;
|
||||||
private int mGroupVisibleQuitKickoffNotification;
|
private int mGroupVisibleQuitKickoffNotification;
|
||||||
@@ -306,6 +317,12 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
mPushExpiredTimes = Long.parseLong(m_Server.getConfig().getProperty(BrokerConstants.MESSAGE_Push_Expired_Days, "7")) * 86400000L;
|
||||||
|
if(mPushExpiredTimes == 0) mPushExpiredTimes = Long.MAX_VALUE;
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mChatroomRejoinWhenActive = Boolean.parseBoolean(m_Server.getConfig().getProperty(BrokerConstants.CHATROOM_Rejoin_When_Active));
|
mChatroomRejoinWhenActive = Boolean.parseBoolean(m_Server.getConfig().getProperty(BrokerConstants.CHATROOM_Rejoin_When_Active));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -453,6 +470,17 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
mGroupAllowOwnerRecallSelfMsg = Boolean.parseBoolean(server.getConfig().getProperty(GROUP_Allow_Owner_Recall_Self_Msg, "true"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
mGroupAllowManagerRecallSelfMsg = Boolean.parseBoolean(server.getConfig().getProperty(GROUP_Allow_Manager_Recall_Self_Msg, "false"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mGroupAllowClientCustomOperationNotification = Boolean.parseBoolean(server.getConfig().getProperty(GROUP_Allow_Client_Custom_Operation_Notification));
|
mGroupAllowClientCustomOperationNotification = Boolean.parseBoolean(server.getConfig().getProperty(GROUP_Allow_Client_Custom_Operation_Notification));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -1929,6 +1957,11 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return databaseStore.getUserGroupIds(userId);
|
return databaseStore.getUserGroupIds(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getUserGroupIds(String userId, List<Integer> memberTypes) {
|
||||||
|
return databaseStore.getUserGroupIds(userId, memberTypes);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getCommonGroupIds(String userId1, String userId2) {
|
public Set<String> getCommonGroupIds(String userId1, String userId2) {
|
||||||
return databaseStore.getCommonGroupIds(userId1, userId2);
|
return databaseStore.getCommonGroupIds(userId1, userId2);
|
||||||
@@ -2074,6 +2107,10 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return ErrorCode.ERROR_CODE_NOT_RIGHT;
|
return ErrorCode.ERROR_CODE_NOT_RIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(userList.contains(groupInfo.getOwner())) {
|
||||||
|
return ErrorCode.ERROR_CODE_NOT_RIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
long updateDt = System.currentTimeMillis();
|
long updateDt = System.currentTimeMillis();
|
||||||
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
|
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
|
||||||
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
|
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
|
||||||
@@ -2208,7 +2245,28 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return ErrorCode.ERROR_CODE_RECALL_TIME_EXPIRED;
|
return ErrorCode.ERROR_CODE_RECALL_TIME_EXPIRED;
|
||||||
}
|
}
|
||||||
if (operatorId.equals(groupInfo.getOwner())) {
|
if (operatorId.equals(groupInfo.getOwner())) {
|
||||||
canRecall = true;
|
if(operatorId.equals(message.getFromUser())) {
|
||||||
|
if(mGroupAllowOwnerRecallSelfMsg) {
|
||||||
|
canRecall = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
canRecall = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(message.getFromUser().equals(operatorId) && mGroupAllowManagerRecallSelfMsg) {
|
||||||
|
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
|
||||||
|
Collection<WFCMessage.GroupMember> members = groupMembers.get(message.getConversation().getTarget());
|
||||||
|
if (members == null || members.size() == 0) {
|
||||||
|
members = loadGroupMemberFromDB(hzInstance, message.getConversation().getTarget());
|
||||||
|
}
|
||||||
|
for (WFCMessage.GroupMember member : members) {
|
||||||
|
if (member.getMemberId().equals(operatorId)) {
|
||||||
|
if (member.getType() == GroupMemberType_Manager || member.getType() == ProtoConstants.GroupMemberType.GroupMemberType_Owner) {
|
||||||
|
canRecall = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!canRecall && !message.getFromUser().equals(operatorId)) {
|
if(!canRecall && !message.getFromUser().equals(operatorId)) {
|
||||||
@@ -2274,7 +2332,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
json.put("c", message.getContent().getContent());
|
json.put("c", message.getContent().getContent());
|
||||||
json.put("e", message.getContent().getExtra());
|
json.put("e", message.getContent().getExtra());
|
||||||
if (message.getContent().getData() != null && message.getContent().getData().size() > 0) {
|
if (message.getContent().getData() != null && message.getContent().getData().size() > 0) {
|
||||||
json.put("b", Base64.getEncoder().encode(message.getContent().getData().toByteArray()));
|
json.put("b", Base64.getEncoder().encodeToString(message.getContent().getData().toByteArray()));
|
||||||
}
|
}
|
||||||
if (message.getContent().getMediaType() > 0) {
|
if (message.getContent().getMediaType() > 0) {
|
||||||
json.put("mt", message.getContent().getMediaType());
|
json.put("mt", message.getContent().getMediaType());
|
||||||
@@ -3100,13 +3158,27 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (existRequest != null && existRequest.getStatus() != ProtoConstants.FriendRequestStatus.RequestStatus_Accepted && !isAdmin) {
|
if (existRequest != null && existRequest.getStatus() != ProtoConstants.FriendRequestStatus.RequestStatus_Accepted && !isAdmin) {
|
||||||
if (mFriendRequestDuration > 0 && System.currentTimeMillis() - existRequest.getUpdateDt() > mFriendRequestDuration) {
|
if (existRequest.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Rejected
|
||||||
if (existRequest.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Rejected
|
&& System.currentTimeMillis() - existRequest.getUpdateDt() < mFriendRejectDuration) {
|
||||||
&& System.currentTimeMillis() - existRequest.getUpdateDt() < mFriendRejectDuration) {
|
return ErrorCode.ERROR_CODE_FRIEND_REQUEST_BLOCKED;
|
||||||
return ErrorCode.ERROR_CODE_FRIEND_REQUEST_BLOCKED;
|
}
|
||||||
|
|
||||||
|
if (!(mFriendRequestDuration > 0 && System.currentTimeMillis() - existRequest.getUpdateDt() > mFriendRequestDuration)) {
|
||||||
|
if(System.currentTimeMillis() - existRequest.getUpdateDt() > 5 * 60 * 1000) {
|
||||||
|
return ErrorCode.ERROR_CODE_FRIEND_ALREADY_REQUEST;
|
||||||
|
} else {
|
||||||
|
mWriteLock.lock();
|
||||||
|
try {
|
||||||
|
String repeatKey = userId + "-" + existRequest.getToUid();
|
||||||
|
Long lastTime = repeatFriendRequest.get(repeatKey);
|
||||||
|
if(lastTime != null && System.currentTimeMillis() - lastTime < 5 * 60 * 1000) {
|
||||||
|
return ErrorCode.ERROR_CODE_FRIEND_ALREADY_REQUEST;
|
||||||
|
}
|
||||||
|
repeatFriendRequest.put(repeatKey, System.currentTimeMillis());
|
||||||
|
} finally {
|
||||||
|
mWriteLock.unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return ErrorCode.ERROR_CODE_FRIEND_ALREADY_REQUEST;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4321,6 +4393,11 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return mFriendRobotAutoAccept;
|
return mFriendRobotAutoAccept;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getPushExpiredTimes() {
|
||||||
|
return mPushExpiredTimes;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Integer> getClientForbiddenSendTypes() {
|
public List<Integer> getClientForbiddenSendTypes() {
|
||||||
return mForbiddenClientSendTypes;
|
return mForbiddenClientSendTypes;
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ public interface IMessagesStore {
|
|||||||
List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> requests, String fromUser, boolean isAdmin);
|
List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> requests, String fromUser, boolean isAdmin);
|
||||||
WFCMessage.GroupInfo getGroupInfo(String groupId);
|
WFCMessage.GroupInfo getGroupInfo(String groupId);
|
||||||
Set<String> getUserGroupIds(String userId);
|
Set<String> getUserGroupIds(String userId);
|
||||||
|
Set<String> getUserGroupIds(String userId, List<Integer> types);
|
||||||
Set<String> getCommonGroupIds(String userId1, String userId2);
|
Set<String> getCommonGroupIds(String userId1, String userId2);
|
||||||
ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List<WFCMessage.GroupMember> members);
|
ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List<WFCMessage.GroupMember> members);
|
||||||
WFCMessage.GroupMember getGroupMember(String groupId, String memberId);
|
WFCMessage.GroupMember getGroupMember(String groupId, String memberId);
|
||||||
@@ -244,6 +245,8 @@ public interface IMessagesStore {
|
|||||||
|
|
||||||
boolean isRobotAutoAcceptFriendRequest();
|
boolean isRobotAutoAcceptFriendRequest();
|
||||||
|
|
||||||
|
long getPushExpiredTimes();
|
||||||
|
|
||||||
List<Integer> getClientForbiddenSendTypes();
|
List<Integer> getClientForbiddenSendTypes();
|
||||||
List<Integer> getBlackListExceptionTypes();
|
List<Integer> getBlackListExceptionTypes();
|
||||||
List<Integer> getGroupMuteExceptionTypes();
|
List<Integer> getGroupMuteExceptionTypes();
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ public class MessagesPublisher {
|
|||||||
|
|
||||||
for (Session targetSession : sessions) {
|
for (Session targetSession : sessions) {
|
||||||
//超过7天不活跃的用户忽略
|
//超过7天不活跃的用户忽略
|
||||||
if(System.currentTimeMillis() - targetSession.getLastActiveTime() > 7 * 24 * 60 * 60 * 1000) {
|
if(System.currentTimeMillis() - targetSession.getLastActiveTime() > m_messagesStore.getPushExpiredTimes()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.1.7</version>
|
<version>1.1.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public interface APIPath {
|
|||||||
String Group_Mute_Member = "/admin/group/manager/mute";
|
String Group_Mute_Member = "/admin/group/manager/mute";
|
||||||
String Group_Allow_Member = "/admin/group/manager/allow";
|
String Group_Allow_Member = "/admin/group/manager/allow";
|
||||||
String Get_User_Groups = "/admin/group/of_user";
|
String Get_User_Groups = "/admin/group/of_user";
|
||||||
|
String Get_User_Groups_By_Type = "/admin/group/of_user_by_type";
|
||||||
String Group_Set_Member_Alias = "/admin/group/member/set_alias";
|
String Group_Set_Member_Alias = "/admin/group/member/set_alias";
|
||||||
String Group_Set_Member_Extra = "/admin/group/member/set_extra";
|
String Group_Set_Member_Extra = "/admin/group/member/set_extra";
|
||||||
String Get_Common_Groups = "/admin/group/common_group";
|
String Get_Common_Groups = "/admin/group/common_group";
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <heavyrain.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class InputGetUserGroupByType {
|
||||||
|
private String userId;
|
||||||
|
private List<Integer> groupMemberTypes;
|
||||||
|
|
||||||
|
public InputGetUserGroupByType() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public InputGetUserGroupByType(String userId, List<Integer> groupMemberTypes) {
|
||||||
|
this.userId = userId;
|
||||||
|
this.groupMemberTypes = groupMemberTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(String userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Integer> getGroupMemberTypes() {
|
||||||
|
return groupMemberTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupMemberTypes(List<Integer> groupMemberTypes) {
|
||||||
|
this.groupMemberTypes = groupMemberTypes;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -176,7 +176,7 @@ public class AES {
|
|||||||
//2018.1.1 0:0:0 以来的小时数
|
//2018.1.1 0:0:0 以来的小时数
|
||||||
int curhour = (int) ((System.currentTimeMillis()/1000 - 1514736000)/3600);
|
int curhour = (int) ((System.currentTimeMillis()/1000 - 1514736000)/3600);
|
||||||
|
|
||||||
if (curhour - hours > 24 && checkTime) {
|
if (Math.abs(curhour - hours) > 24 && checkTime) {
|
||||||
if(invalidTime != null) {
|
if(invalidTime != null) {
|
||||||
invalidTime[0] = true;
|
invalidTime[0] = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<!--<relativePath>../pom.xml</relativePath>-->
|
<!--<relativePath>../pom.xml</relativePath>-->
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.1.7</version>
|
<version>1.1.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>distribution</artifactId>
|
<artifactId>distribution</artifactId>
|
||||||
|
|||||||
@@ -121,6 +121,9 @@ message.group_mute_exception_types 401,402,403,404,405,407,408,410,411
|
|||||||
## 用户被全局禁言时允许发送的消息类型
|
## 用户被全局禁言时允许发送的消息类型
|
||||||
message.global_mute_exception_types 401,402,403,404,405,407,408,410,411
|
message.global_mute_exception_types 401,402,403,404,405,407,408,410,411
|
||||||
|
|
||||||
|
## 离线用户推送过期天数,0是永不过期,建议配置为7天。
|
||||||
|
message.push_expired_days 7
|
||||||
|
|
||||||
## 消息转发功能开启时,开关是否不转发server api接口消息。
|
## 消息转发功能开启时,开关是否不转发server api接口消息。
|
||||||
## 当为true时,不转发server api发送的消息;当为false时,转发server api发送的消息。
|
## 当为true时,不转发server api发送的消息;当为false时,转发server api发送的消息。
|
||||||
message.no_forward_admin_message false
|
message.no_forward_admin_message false
|
||||||
@@ -164,6 +167,12 @@ chatroom.rejoin_when_active true
|
|||||||
## 当一个聊天室不存在时,如果有用户加入就自动创建
|
## 当一个聊天室不存在时,如果有用户加入就自动创建
|
||||||
chatroom.create_when_not_exist true
|
chatroom.create_when_not_exist true
|
||||||
|
|
||||||
|
## 是否允许群主不受限制地撤回自己发送的消息。false可以${message.recall_time_limit}撤回自己的消息;true可以撤回任意时间自己的消息。默认为true。
|
||||||
|
group.allow_owner_recall_self_msg true
|
||||||
|
|
||||||
|
## 是否允许群管理员不受限制地撤回自己发送的消息。false可以${message.recall_time_limit}撤回自己的消息;true可以撤回任意时间自己的消息。默认为false。
|
||||||
|
group.allow_manager_recall_self_msg false
|
||||||
|
|
||||||
## 是否允许客户端发送操作群的自定义群通知消息
|
## 是否允许客户端发送操作群的自定义群通知消息
|
||||||
group.allow_client_custom_operation_notification true
|
group.allow_client_custom_operation_notification true
|
||||||
|
|
||||||
@@ -365,10 +374,12 @@ push.ios.server.address http://localhost:8085/ios/push
|
|||||||
#*********************************************************************
|
#*********************************************************************
|
||||||
# Sensitive configuration
|
# Sensitive configuration
|
||||||
#*********************************************************************
|
#*********************************************************************
|
||||||
## 内置文本敏感词过滤处理方法,0 发送失败;1 发送成功但消息被服务器直接丢弃;2 命中的敏感词被替换成***;3 记录并继续发送
|
## 内置文本敏感词过滤处理方法,当命中敏感词后,消息会被记录到t_sensitive_messages表中,然后根据type类型做不同的处理,处理方式如下:
|
||||||
|
## 0 发送失败;1 发送成功但消息被服务器直接丢弃;2 命中的敏感词被替换成***然后正常发送;3 正常发送。
|
||||||
|
## 如果开启 message.sensitive.forward.url 配置,命中敏感词的消息还会被回调到这个地址
|
||||||
sensitive.filter.type 0
|
sensitive.filter.type 0
|
||||||
|
|
||||||
## 如果内置敏感词库无法满足您的需求,可以自己开发部署敏感词审核服务。配置如下地址和消息类型,IM服务会把指定消息类型的消息回调到指定地址
|
## 如果内置敏感词库无法满足您的需求,可以开发部署独立敏感词审核服务。配置如下地址和消息类型,IM服务会把指定消息类型的消息回调到指定地址,内置的敏感词审核和敏感词转发功能就不再起作用了。
|
||||||
## 审核服务返回状态码200表示继续发送,如果需要替换内容,返回状态码200并且内容为替换后的内容。返回403表示不允许发送。其它错误继续发送。
|
## 审核服务返回状态码200表示继续发送,如果需要替换内容,返回状态码200并且内容为替换后的内容。返回403表示不允许发送。其它错误继续发送。
|
||||||
## 独立审核服务地址,IM服务会post SendMessageData。如果需要修改消息内容,返回 MessagePayload。请参考应用服务中 "/message/censor" Mapping.
|
## 独立审核服务地址,IM服务会post SendMessageData。如果需要修改消息内容,返回 MessagePayload。请参考应用服务中 "/message/censor" Mapping.
|
||||||
#sensitive.remote_server_url http://192.168.3.202:8888/message/censor
|
#sensitive.remote_server_url http://192.168.3.202:8888/message/censor
|
||||||
|
|||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
# 野火IM服务docker使用说明
|
# 野火IM服务docker使用说明
|
||||||
|
|
||||||
## 编译镜像
|
## 编译镜像
|
||||||
首先需要先编译应用服务,在项目根目录下使用下面命令编译
|
首先需要先编译IM服务,在项目根目录下使用下面命令编译
|
||||||
```
|
```
|
||||||
mvn clean package
|
mvn clean package
|
||||||
```
|
```
|
||||||
@@ -14,7 +14,7 @@ sudo docker build -t im-server .
|
|||||||
|
|
||||||
## 运行
|
## 运行
|
||||||
配置:
|
配置:
|
||||||
运行需要手动指定配置目录,手动指定配置目录的方法如下,其中$PATH_TO_CONFIG为im配置目录,需要为绝对路径,模版为```distribution/src/main/resources```目录。另外需要创建h2数据库目录(如果用mysql就不需要了)、日志目录、内置存储服务目录(如果使用其它对象存储服务就不需要了)。
|
运行需要手动指定配置目录,手动指定配置目录的方法如下,其中$PATH_TO_CONFIG为im配置目录,需要为绝对路径,模版为```distribution/src/main/resources```目录。另外需要创建h2数据库目录(如果用mysql就不需要了)、日志目录、内置存储服务目录(如果使用其它对象存储服务就不需要了)。h2数据库目录/日志目录/内置存储服务目录需要有写权限,因为IM服务会写入文件。
|
||||||
```
|
```
|
||||||
sudo docker run -it --name im-server -v $PATH_TO_CONFIG:/opt/im-server/config -v $PATH_TO_LOGS:/opt/im-server/logs -v $PATH_TO_H2DB:/opt/im-server/h2db -v $PATH_TO_MEDIA:/opt/im-server/media -e JVM_XMX=256M -e JVM_XMS=256M -p 80:80 -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 18080:18080 im-server
|
sudo docker run -it --name im-server -v $PATH_TO_CONFIG:/opt/im-server/config -v $PATH_TO_LOGS:/opt/im-server/logs -v $PATH_TO_H2DB:/opt/im-server/h2db -v $PATH_TO_MEDIA:/opt/im-server/media -e JVM_XMX=256M -e JVM_XMS=256M -p 80:80 -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 18080:18080 im-server
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
|
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>1.1.7</version>
|
<version>1.1.9</version>
|
||||||
<name>Wildfire Chat</name>
|
<name>Wildfire Chat</name>
|
||||||
<description>Wildfire Chat Server</description>
|
<description>Wildfire Chat Server</description>
|
||||||
<inceptionYear>2019</inceptionYear>
|
<inceptionYear>2019</inceptionYear>
|
||||||
|
|||||||
@@ -12,6 +12,20 @@
|
|||||||
|
|
||||||
# 更新记录
|
# 更新记录
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Release note 1.1.9:
|
||||||
|
1. 解决服务器时间误差太大引起的问题。
|
||||||
|
2. 添加推送过期配置。
|
||||||
|
3. 支持发送好友请求后5分钟之内再次发送。
|
||||||
|
4. Server API支持根据群成员类型获取用户群列表。
|
||||||
|
5. 添加配置,是否允许群主和群管理员无限制撤回自己的消息。
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Release note 1.1.8:
|
||||||
|
1. 解决可以把群主设置为管理员的问题。
|
||||||
|
2. 发送好友请求之后5分钟内可以再次发送。
|
||||||
|
3. 解决撤回消息中原消息二进制内容格式错误问题。
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
Release note 1.1.7:
|
Release note 1.1.7:
|
||||||
1. 优化用户搜索功能。
|
1. 优化用户搜索功能。
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.1.7</version>
|
<version>1.1.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package cn.wildfirechat.sdk;
|
|||||||
|
|
||||||
import cn.wildfirechat.common.APIPath;
|
import cn.wildfirechat.common.APIPath;
|
||||||
import cn.wildfirechat.pojos.*;
|
import cn.wildfirechat.pojos.*;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
import cn.wildfirechat.sdk.model.IMResult;
|
import cn.wildfirechat.sdk.model.IMResult;
|
||||||
import cn.wildfirechat.sdk.utilities.AdminHttpUtils;
|
import cn.wildfirechat.sdk.utilities.AdminHttpUtils;
|
||||||
|
|
||||||
@@ -178,6 +179,12 @@ public class GroupAdmin {
|
|||||||
return AdminHttpUtils.httpJsonPost(path, inputUserId, OutputGroupIds.class);
|
return AdminHttpUtils.httpJsonPost(path, inputUserId, OutputGroupIds.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IMResult<OutputGroupIds> getUserGroupsByType(String user, List</*ProtoConstants.GroupMemberType*/Integer> groupMemberType) throws Exception {
|
||||||
|
String path = APIPath.Get_User_Groups_By_Type;
|
||||||
|
InputGetUserGroupByType input = new InputGetUserGroupByType(user, groupMemberType);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, input, OutputGroupIds.class);
|
||||||
|
}
|
||||||
|
|
||||||
public static IMResult<OutputGroupIds> getCommonGroups(String user1, String user2) throws Exception {
|
public static IMResult<OutputGroupIds> getCommonGroups(String user1, String user2) throws Exception {
|
||||||
String path = APIPath.Get_Common_Groups;
|
String path = APIPath.Get_Common_Groups;
|
||||||
StringPairPojo intput = new StringPairPojo(user1, user2);
|
StringPairPojo intput = new StringPairPojo(user1, user2);
|
||||||
|
|||||||
@@ -388,7 +388,6 @@ public class Main {
|
|||||||
System.out.println("success");
|
System.out.println("success");
|
||||||
} else {
|
} else {
|
||||||
System.out.println("send friend request success");
|
System.out.println("send friend request success");
|
||||||
System.exit(-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IMResult<Void> updateFriendStatusResult = RelationAdmin.setUserFriend("ff1", "ff2", true, "{\"from\":1}");
|
IMResult<Void> updateFriendStatusResult = RelationAdmin.setUserFriend("ff1", "ff2", true, "{\"from\":1}");
|
||||||
@@ -657,6 +656,14 @@ public class Main {
|
|||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
groupIdsIMResult = GroupAdmin.getUserGroupsByType("user2", Arrays.asList(ProtoConstants.GroupMemberType.GroupMemberType_Manager, ProtoConstants.GroupMemberType.GroupMemberType_Owner));
|
||||||
|
if (groupIdsIMResult != null && groupIdsIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
System.out.println("get user groups by type success");
|
||||||
|
} else {
|
||||||
|
System.out.println("get user groups by type failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
groupIdsIMResult = GroupAdmin.getCommonGroups("user1", "user2");
|
groupIdsIMResult = GroupAdmin.getCommonGroups("user1", "user2");
|
||||||
if (groupIdsIMResult != null && groupIdsIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
if (groupIdsIMResult != null && groupIdsIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
System.out.println("get user common groups success");
|
System.out.println("get user common groups success");
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ public class AdminHttpUtils extends JsonUtils {
|
|||||||
if (object != null) {
|
if (object != null) {
|
||||||
jsonStr = gson.toJson(object);
|
jsonStr = gson.toJson(object);
|
||||||
}
|
}
|
||||||
LOG.info("http request:{} content: {}", path, jsonStr);
|
LOG.info("http request:{} content: {}", url, jsonStr);
|
||||||
|
|
||||||
StringEntity entity = new StringEntity(jsonStr, Charset.forName("UTF-8"));
|
StringEntity entity = new StringEntity(jsonStr, Charset.forName("UTF-8"));
|
||||||
entity.setContentEncoding("UTF-8");
|
entity.setContentEncoding("UTF-8");
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ public class ChannelHttpUtils extends JsonUtils {
|
|||||||
if (object != null) {
|
if (object != null) {
|
||||||
jsonStr = gson.toJson(object);
|
jsonStr = gson.toJson(object);
|
||||||
}
|
}
|
||||||
LOG.info("http request:{} content: {}", path, jsonStr);
|
LOG.info("http request:{} content: {}", url, jsonStr);
|
||||||
|
|
||||||
StringEntity entity = new StringEntity(jsonStr, Charset.forName("UTF-8"));
|
StringEntity entity = new StringEntity(jsonStr, Charset.forName("UTF-8"));
|
||||||
entity.setContentEncoding("UTF-8");
|
entity.setContentEncoding("UTF-8");
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ public class RobotHttpUtils extends JsonUtils {
|
|||||||
if (object != null) {
|
if (object != null) {
|
||||||
jsonStr = gson.toJson(object);
|
jsonStr = gson.toJson(object);
|
||||||
}
|
}
|
||||||
LOG.info("http request:{} content: {}", path, jsonStr);
|
LOG.info("http request:{} content: {}", url, jsonStr);
|
||||||
|
|
||||||
if(!StringUtil.isNullOrEmpty(jsonStr)) {
|
if(!StringUtil.isNullOrEmpty(jsonStr)) {
|
||||||
StringEntity entity = new StringEntity(jsonStr, Charset.forName("UTF-8"));
|
StringEntity entity = new StringEntity(jsonStr, Charset.forName("UTF-8"));
|
||||||
|
|||||||
Reference in New Issue
Block a user