diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 2647207f9a..2446a58a5f 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -225,6 +225,22 @@ Sockets.getUserSockets = function(uid) { /* Helpers */ +Sockets.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 + }; +}; + Sockets.isUserOnline = isUserOnline; function isUserOnline(uid) { return Sockets.getUserSockets(uid).length > 0; diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index 59e850a7f7..7398ea28cd 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -13,23 +13,9 @@ var async = require('async'), user = require('../user'), websockets = require('./index'), - SocketPosts = {}, - - 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 = {}; + + SocketPosts.reply = function(socket, data, callback) { @@ -42,7 +28,7 @@ SocketPosts.reply = function(socket, data, callback) { } data.uid = socket.uid; - data.req = reqFromSocket(socket); + data.req = websockets.reqFromSocket(socket); topics.reply(data, function(err, postData) { if(err) { diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index 283448a25a..6ca38f9ce9 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -5,7 +5,7 @@ var topics = require('../topics'), categories = require('../categories'), threadTools = require('../threadTools'), categoryTools = require('../categoryTools'), - index = require('./index'), + websockets = require('./index'), user = require('../user'), db = require('./../database'), meta = require('./../meta'), @@ -25,20 +25,27 @@ SocketTopics.post = function(socket, data, callback) { return callback(new Error('[[error:not-logged-in]]')); } - topics.post({uid: socket.uid, title: data.title, content: data.content, cid: data.category_id, thumb: data.topic_thumb}, function(err, result) { + topics.post({ + uid: socket.uid, + title: data.title, + content: data.content, + cid: data.category_id, + thumb: data.topic_thumb, + req: websockets.reqFromSocket(socket) + }, function(err, result) { if(err) { return callback(err); } if (result) { - index.server.sockets.in('category_' + data.category_id).emit('event:new_topic', result.topicData); - index.server.sockets.in('recent_posts').emit('event:new_topic', result.topicData); - index.server.sockets.in('home').emit('event:new_topic', result.topicData); - index.server.sockets.in('home').emit('event:new_post', { + websockets.server.sockets.in('category_' + data.category_id).emit('event:new_topic', result.topicData); + websockets.server.sockets.in('recent_posts').emit('event:new_topic', result.topicData); + websockets.server.sockets.in('home').emit('event:new_topic', result.topicData); + websockets.server.sockets.in('home').emit('event:new_post', { posts: result.postData }); - index.server.sockets.in('user/' + socket.uid).emit('event:new_post', { + websockets.server.sockets.in('user/' + socket.uid).emit('event:new_post', { posts: result.postData }); @@ -253,11 +260,11 @@ SocketTopics.move = function(socket, data, callback) { return next(err); } - index.server.sockets.in('topic_' + tid).emit('event:topic_moved', { + websockets.server.sockets.in('topic_' + tid).emit('event:topic_moved', { tid: tid }); - index.server.sockets.in('category_' + oldCid).emit('event:topic_moved', { + websockets.server.sockets.in('category_' + oldCid).emit('event:topic_moved', { tid: tid }); diff --git a/src/topics/create.js b/src/topics/create.js index ebf12ff15e..3072dba2ae 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -83,6 +83,16 @@ module.exports = function(Topics) { } async.waterfall([ + function(next) { + plugins.fireHook('filter:topic.post', data, function(err, filteredData) { + if (err) { + return next(err); + } + + content = filteredData.content || data.content; + next(); + }); + }, function(next) { categoryTools.exists(cid, next); }, @@ -105,7 +115,7 @@ module.exports = function(Topics) { Topics.create({uid: uid, title: title, cid: cid, thumb: thumb}, next); }, function(tid, next) { - Topics.reply({uid:uid, tid:tid, content:content}, next); + Topics.reply({uid:uid, tid:tid, content:content, req: data.req}, next); }, function(postData, next) { threadTools.toggleFollow(postData.tid, uid);