mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-28 09:36:16 +01:00
closes #5017
This commit is contained in:
@@ -53,13 +53,9 @@ SocketModules.chats.newRoom = function(socket, data, callback) {
|
||||
if (!data) {
|
||||
return callback(new Error('[[error:invalid-data]]'));
|
||||
}
|
||||
var now = Date.now();
|
||||
// Websocket rate limiting
|
||||
socket.lastChatMessageTime = socket.lastChatMessageTime || 0;
|
||||
if (now - socket.lastChatMessageTime < 200) {
|
||||
|
||||
if (rateLimitExceeded(socket)) {
|
||||
return callback(new Error('[[error:too-many-messages]]'));
|
||||
} else {
|
||||
socket.lastChatMessageTime = now;
|
||||
}
|
||||
|
||||
Messaging.canMessageUser(socket.uid, data.touid, function(err) {
|
||||
@@ -76,14 +72,8 @@ SocketModules.chats.send = function(socket, data, callback) {
|
||||
return callback(new Error('[[error:invalid-data]]'));
|
||||
}
|
||||
|
||||
var now = Date.now();
|
||||
|
||||
// Websocket rate limiting
|
||||
socket.lastChatMessageTime = socket.lastChatMessageTime || 0;
|
||||
if (now - socket.lastChatMessageTime < 200) {
|
||||
if (rateLimitExceeded(socket)) {
|
||||
return callback(new Error('[[error:too-many-messages]]'));
|
||||
} else {
|
||||
socket.lastChatMessageTime = now;
|
||||
}
|
||||
|
||||
async.waterfall([
|
||||
@@ -100,7 +90,7 @@ SocketModules.chats.send = function(socket, data, callback) {
|
||||
Messaging.canMessageRoom(socket.uid, data.roomId, next);
|
||||
},
|
||||
function (next) {
|
||||
Messaging.sendMessage(socket.uid, data.roomId, data.message, now, next);
|
||||
Messaging.sendMessage(socket.uid, data.roomId, data.message, Date.now(), next);
|
||||
},
|
||||
function (message, next) {
|
||||
Messaging.notifyUsersInRoom(socket.uid, data.roomId, message);
|
||||
@@ -110,6 +100,18 @@ SocketModules.chats.send = function(socket, data, callback) {
|
||||
], callback);
|
||||
};
|
||||
|
||||
function rateLimitExceeded(socket) {
|
||||
var now = Date.now();
|
||||
socket.lastChatMessageTime = socket.lastChatMessageTime || 0;
|
||||
var delay = meta.config.hasOwnProperty('chatMessageDelay') ? parseInt(meta.config.chatMessageDelay, 10) : 200;
|
||||
if (now - socket.lastChatMessageTime < delay) {
|
||||
return true;
|
||||
} else {
|
||||
socket.lastChatMessageTime = now;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
SocketModules.chats.loadRoom = function(socket, data, callback) {
|
||||
if (!data || !data.roomId) {
|
||||
return callback(new Error('[[error:invalid-data]]'));
|
||||
|
||||
Reference in New Issue
Block a user