From b467ec28f5b1ede66416c530f91174d1d06370fb Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Fri, 16 Jun 2017 15:47:21 -0300 Subject: [PATCH 1/7] Adds settings to limit chain of quotes --- packages/rocketchat-lib/server/startup/settings.js | 5 +++++ packages/rocketchat-oembed/server/jumpToMessage.js | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/rocketchat-lib/server/startup/settings.js b/packages/rocketchat-lib/server/startup/settings.js index 1671d5185bee..9f6d4cec72ff 100644 --- a/packages/rocketchat-lib/server/startup/settings.js +++ b/packages/rocketchat-lib/server/startup/settings.js @@ -806,6 +806,10 @@ RocketChat.settings.addGroup('Message', function() { 'public': true, i18nDescription: 'Message_TimeAndDateFormat_Description' }); + this.add('Message_QuoteChainLimit', 2, { + type: 'int', + 'public': true + }); this.add('Message_HideType_uj', false, { type: 'boolean', 'public': true @@ -822,6 +826,7 @@ RocketChat.settings.addGroup('Message', function() { type: 'boolean', 'public': true }); + return this.add('Message_HideType_mute_unmute', false, { type: 'boolean', 'public': true diff --git a/packages/rocketchat-oembed/server/jumpToMessage.js b/packages/rocketchat-oembed/server/jumpToMessage.js index 2cb673cb3a9b..2f9c44a28961 100644 --- a/packages/rocketchat-oembed/server/jumpToMessage.js +++ b/packages/rocketchat-oembed/server/jumpToMessage.js @@ -13,6 +13,17 @@ RocketChat.callbacks.add('beforeSaveMessage', (msg) => { if (_.isString(queryString.msg)) { // Jump-to query param const jumpToMessage = RocketChat.models.Messages.findOneById(queryString.msg); if (jumpToMessage) { + let chainQuotes = jumpToMessage; + let index = 1; + while (chainQuotes && 'attachments' in chainQuotes) { + if(index >= RocketChat.settings.get('Message_QuoteChainLimit')) { + delete(chainQuotes.attachments); + break; + } + chainQuotes = chainQuotes.attachments[0]; + index++; + } + msg.attachments = msg.attachments || []; msg.attachments.push({ 'text' : jumpToMessage.msg, From 59478697c01f2446ccfe5ebc5ff07e244ea85097 Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Fri, 16 Jun 2017 16:20:07 -0300 Subject: [PATCH 2/7] Adds text for Message_QuoteChainLimit setting --- packages/rocketchat-i18n/i18n/en.i18n.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 1b2888536b9a..8a99a635c133 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -1006,6 +1006,7 @@ "Message_MaxAll": "Maximum channel size for ALL message", "Message_MaxAllowedSize": "Maximum Allowed Message Size", "Message_pinning": "Message pinning", + "Message_QuoteChainLimit": "Maximum Number of Chained Quotes", "Message_removed": "Message removed", "Message_SetNameToAliasEnabled": "Set a user name to alias in message", "Message_SetNameToAliasEnabled_Description": "Only if not already set alias. The old messages alias not changed if user has changed the name.", From 1730c28686255aa8dea19aa2ac89922fd9379b45 Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Fri, 16 Jun 2017 16:32:27 -0300 Subject: [PATCH 3/7] fixing codacy lint review --- packages/rocketchat-oembed/server/jumpToMessage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-oembed/server/jumpToMessage.js b/packages/rocketchat-oembed/server/jumpToMessage.js index 2f9c44a28961..b891d412094d 100644 --- a/packages/rocketchat-oembed/server/jumpToMessage.js +++ b/packages/rocketchat-oembed/server/jumpToMessage.js @@ -16,7 +16,7 @@ RocketChat.callbacks.add('beforeSaveMessage', (msg) => { let chainQuotes = jumpToMessage; let index = 1; while (chainQuotes && 'attachments' in chainQuotes) { - if(index >= RocketChat.settings.get('Message_QuoteChainLimit')) { + if (index >= RocketChat.settings.get('Message_QuoteChainLimit')) { delete(chainQuotes.attachments); break; } From 23f09eb13930f8afa98c5ead4af022263b6e36d2 Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Tue, 20 Jun 2017 14:35:59 -0300 Subject: [PATCH 4/7] Refactor into recursive solution to purge all attachments from message --- .../rocketchat-oembed/server/jumpToMessage.js | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/rocketchat-oembed/server/jumpToMessage.js b/packages/rocketchat-oembed/server/jumpToMessage.js index b891d412094d..6f3768f054a5 100644 --- a/packages/rocketchat-oembed/server/jumpToMessage.js +++ b/packages/rocketchat-oembed/server/jumpToMessage.js @@ -2,6 +2,17 @@ const URL = Npm.require('url'); const QueryString = Npm.require('querystring'); +const recursiveRemove = + (message, deep = 0) => { + if(message) { + if('attachments' in message && deep < RocketChat.settings.get('Message_QuoteChainLimit')) { + message.attachments.map((msg) => recursiveRemove(msg, deep + 1)); + } else { + delete(message.attachments); + } + } + return message; + } RocketChat.callbacks.add('beforeSaveMessage', (msg) => { if (msg && msg.urls) { @@ -11,19 +22,8 @@ RocketChat.callbacks.add('beforeSaveMessage', (msg) => { if (urlObj.query) { const queryString = QueryString.parse(urlObj.query); if (_.isString(queryString.msg)) { // Jump-to query param - const jumpToMessage = RocketChat.models.Messages.findOneById(queryString.msg); + const jumpToMessage = recursiveRemove(RocketChat.models.Messages.findOneById(queryString.msg)); if (jumpToMessage) { - let chainQuotes = jumpToMessage; - let index = 1; - while (chainQuotes && 'attachments' in chainQuotes) { - if (index >= RocketChat.settings.get('Message_QuoteChainLimit')) { - delete(chainQuotes.attachments); - break; - } - chainQuotes = chainQuotes.attachments[0]; - index++; - } - msg.attachments = msg.attachments || []; msg.attachments.push({ 'text' : jumpToMessage.msg, From 8dced4345224ba636de2f07c58810c8932471344 Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Tue, 20 Jun 2017 14:45:11 -0300 Subject: [PATCH 5/7] codacy bot hates me --- .../rocketchat-oembed/server/jumpToMessage.js | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/rocketchat-oembed/server/jumpToMessage.js b/packages/rocketchat-oembed/server/jumpToMessage.js index 6f3768f054a5..795974ffd6e7 100644 --- a/packages/rocketchat-oembed/server/jumpToMessage.js +++ b/packages/rocketchat-oembed/server/jumpToMessage.js @@ -2,17 +2,16 @@ const URL = Npm.require('url'); const QueryString = Npm.require('querystring'); -const recursiveRemove = - (message, deep = 0) => { - if(message) { - if('attachments' in message && deep < RocketChat.settings.get('Message_QuoteChainLimit')) { - message.attachments.map((msg) => recursiveRemove(msg, deep + 1)); - } else { - delete(message.attachments); - } - } - return message; - } +const recursiveRemove = (message, deep = 0) => { + if (message) { + if ('attachments' in message && deep < RocketChat.settings.get('Message_QuoteChainLimit')) { + message.attachments.map((msg) => recursiveRemove(msg, deep + 1)); + } else { + delete(message.attachments); + } + } + return message; +} RocketChat.callbacks.add('beforeSaveMessage', (msg) => { if (msg && msg.urls) { From 5d6aaf1e0a594e5d2985dc3cb0cde0820e8c94b3 Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Tue, 20 Jun 2017 15:31:05 -0300 Subject: [PATCH 6/7] CI hates me --- packages/rocketchat-oembed/server/jumpToMessage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-oembed/server/jumpToMessage.js b/packages/rocketchat-oembed/server/jumpToMessage.js index 795974ffd6e7..1871512eea78 100644 --- a/packages/rocketchat-oembed/server/jumpToMessage.js +++ b/packages/rocketchat-oembed/server/jumpToMessage.js @@ -11,7 +11,7 @@ const recursiveRemove = (message, deep = 0) => { } } return message; -} +}; RocketChat.callbacks.add('beforeSaveMessage', (msg) => { if (msg && msg.urls) { From 32c48bb8eeb69a3b8528452c0c8d59dc8e3020a0 Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Tue, 20 Jun 2017 16:34:01 -0300 Subject: [PATCH 7/7] small fix --- packages/rocketchat-oembed/server/jumpToMessage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-oembed/server/jumpToMessage.js b/packages/rocketchat-oembed/server/jumpToMessage.js index 1871512eea78..0167878c3b0c 100644 --- a/packages/rocketchat-oembed/server/jumpToMessage.js +++ b/packages/rocketchat-oembed/server/jumpToMessage.js @@ -2,7 +2,7 @@ const URL = Npm.require('url'); const QueryString = Npm.require('querystring'); -const recursiveRemove = (message, deep = 0) => { +const recursiveRemove = (message, deep = 1) => { if (message) { if ('attachments' in message && deep < RocketChat.settings.get('Message_QuoteChainLimit')) { message.attachments.map((msg) => recursiveRemove(msg, deep + 1));