diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index dde786af7e..b3d36e69b4 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -13,7 +13,24 @@ var async = require('async'), user = require('../user'), websockets = require('./index'), - SocketPosts = {}; + SocketPosts = {}, + + // a shy request-wannabe build from a socket for spam detection purposes + reqFromSocket = function(socket) { + var headers = socket.handshake.headers, + host = headers['host'], + referer = headers['referer']; + + return { + ip: headers['x-forwarded-for'] || (socket.handshake.address || {}).address, + host: host, + protocol: headers['secure'] ? 'https' : 'http', + secure: !!headers['secure'], + url: referer, + path: referer.substr(referer.indexOf(host) + host.length), + headers: headers + }; + }; SocketPosts.reply = function(socket, data, callback) { @@ -26,6 +43,7 @@ SocketPosts.reply = function(socket, data, callback) { } data.uid = socket.uid; + data.req = reqFromSocket(socket); topics.reply(data, function(err, postData) { if(err) { diff --git a/src/topics/create.js b/src/topics/create.js index c9d6482df8..ebf12ff15e 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -140,6 +140,16 @@ module.exports = function(Topics) { postData; async.waterfall([ + function(next) { + plugins.fireHook('filter:topic.reply', data, function(err, filteredData) { + if (err) { + return next(err); + } + + content = filteredData.content || data.content; + next(); + }); + }, function(next) { threadTools.exists(tid, next); },