diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index dde786af7e..4e68fe7a25 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..e8002e45cf 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -141,6 +141,16 @@ module.exports = function(Topics) { 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); }, function(topicExists, next) {