From a8f7b24452ae2ab18a3272258420d330f34dd2d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 15 Mar 2021 15:34:05 -0400 Subject: [PATCH] fix: #9395, pass all data from client to Topics.reply (#9396) * fix: #9395, pass all data from client to Topics.reply so plugins can set custom fields refactor and use setDefaultPostData * fix: circular json error * refactor: change params --- src/api/helpers.js | 7 +++++++ src/api/topics.js | 20 +++----------------- src/posts/create.js | 2 +- src/socket.io/helpers.js | 6 ++---- src/socket.io/posts.js | 3 ++- 5 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/api/helpers.js b/src/api/helpers.js index 618a0f034b..56247b18d6 100644 --- a/src/api/helpers.js +++ b/src/api/helpers.js @@ -10,6 +10,13 @@ const socketHelpers = require('../socket.io/helpers'); const websockets = require('../socket.io'); const events = require('../events'); +exports.setDefaultPostData = function (reqOrSocket, data) { + data.uid = reqOrSocket.uid; + data.req = exports.buildReqObject(reqOrSocket, { ...data }); + data.timestamp = Date.now(); + data.fromQueue = false; +}; + // creates a slimmed down version of the request object exports.buildReqObject = (req, payload) => { req = req || {}; diff --git a/src/api/topics.js b/src/api/topics.js index e0ede09b9e..c5ee6964c2 100644 --- a/src/api/topics.js +++ b/src/api/topics.js @@ -34,10 +34,7 @@ topicsAPI.create = async function (caller, data) { const payload = { ...data }; payload.tags = payload.tags || []; - payload.uid = caller.uid; - payload.req = apiHelpers.buildReqObject(caller); - payload.timestamp = Date.now(); - payload.fromQueue = false; + apiHelpers.setDefaultPostData(caller, payload); // Blacklist & Post Queue await meta.blacklist.test(caller.ip); @@ -58,19 +55,8 @@ topicsAPI.create = async function (caller, data) { }; topicsAPI.reply = async function (caller, data) { - const payload = { - tid: data.tid, - uid: caller.uid, - req: apiHelpers.buildReqObject(caller), // For IP recording - content: data.content, - timestamp: Date.now(), - fromQueue: false, - }; - - if (data.toPid) { payload.toPid = data.toPid; } - if (data.handle && !parseInt(caller.uid, 10)) { - payload.handle = data.handle; - } + const payload = { ...data }; + apiHelpers.setDefaultPostData(caller, payload); // Blacklist & Post Queue await meta.blacklist.test(caller.ip); diff --git a/src/posts/create.js b/src/posts/create.js index c95ba3535e..8fb809efce 100644 --- a/src/posts/create.js +++ b/src/posts/create.js @@ -24,7 +24,7 @@ module.exports = function (Posts) { throw new Error('[[error:invalid-uid]]'); } - if (data.toPid && !utils.isNumber(data.toPid)) { + if (data.hasOwnProperty('toPid') && !utils.isNumber(data.toPid)) { throw new Error('[[error:invalid-pid]]'); } diff --git a/src/socket.io/helpers.js b/src/socket.io/helpers.js index 986c99553e..3b272a0a5e 100644 --- a/src/socket.io/helpers.js +++ b/src/socket.io/helpers.js @@ -18,10 +18,8 @@ const apiHelpers = require('../api/helpers'); const SocketHelpers = module.exports; SocketHelpers.setDefaultPostData = function (data, socket) { - data.uid = socket.uid; - data.req = apiHelpers.buildReqObject(socket); - data.timestamp = Date.now(); - data.fromQueue = false; + websockets.warnDeprecated(socket, 'apiHelpers.setDefaultPostData'); + apiHelpers.setDefaultPostData(socket, data); }; SocketHelpers.notifyNew = async function (uid, type, result) { diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index fbf4e4a01f..82d45d06b8 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -10,6 +10,7 @@ const user = require('../user'); const socketHelpers = require('./helpers'); const utils = require('../utils'); const api = require('../api'); +const apiHelpers = require('../api/helpers'); const sockets = require('.'); @@ -29,7 +30,7 @@ SocketPosts.reply = async function (socket, data) { throw new Error('[[error:invalid-data]]'); } - socketHelpers.setDefaultPostData(data, socket); + apiHelpers.setDefaultPostData(socket, data); await meta.blacklist.test(data.req.ip); const shouldQueue = await posts.shouldQueue(socket.uid, data); if (shouldQueue) {