From fca74fa09cd4665381b03dbe06051d3438cfdff6 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 30 Sep 2021 14:24:15 -0300 Subject: [PATCH] [BREAK] Webhook will fail if user is not part of the channel (#23310) --- app/integrations/server/api/api.js | 6 ++--- app/integrations/server/lib/triggerHandler.js | 8 +++---- .../server/functions/processWebhookMessage.js | 23 ++----------------- 3 files changed, 9 insertions(+), 28 deletions(-) diff --git a/app/integrations/server/api/api.js b/app/integrations/server/api/api.js index b1d1277b4f3..17a04b6c358 100644 --- a/app/integrations/server/api/api.js +++ b/app/integrations/server/api/api.js @@ -11,9 +11,9 @@ import s from 'underscore.string'; import moment from 'moment'; import { incomingLogger } from '../logger'; -import { processWebhookMessage } from '../../../lib'; +import { processWebhookMessage } from '../../../lib/server'; import { API, APIClass, defaultRateLimiterOptions } from '../../../api/server'; -import * as Models from '../../../models'; +import * as Models from '../../../models/server'; import { settings } from '../../../settings/server'; const compiledScripts = {}; @@ -239,7 +239,7 @@ function executeIntegrationRest() { this.bodyParams.bot = { i: this.integration._id }; try { - const message = processWebhookMessage(this.bodyParams, this.user, defaultValues, this.integration); + const message = processWebhookMessage(this.bodyParams, this.user, defaultValues); if (_.isEmpty(message)) { return API.v1.failure('unknown-error'); } diff --git a/app/integrations/server/lib/triggerHandler.js b/app/integrations/server/lib/triggerHandler.js index 0c5afb6cbde..33cc33ddb24 100644 --- a/app/integrations/server/lib/triggerHandler.js +++ b/app/integrations/server/lib/triggerHandler.js @@ -9,9 +9,9 @@ import moment from 'moment'; import Fiber from 'fibers'; import Future from 'fibers/future'; -import * as Models from '../../../models'; -import { settings } from '../../../settings'; -import { getRoomByNameOrIdWithOptionToJoin, processWebhookMessage } from '../../../lib'; +import * as Models from '../../../models/server'; +import { settings } from '../../../settings/server'; +import { getRoomByNameOrIdWithOptionToJoin, processWebhookMessage } from '../../../lib/server'; import { outgoingLogger } from '../logger'; import { integrations } from '../../lib/rocketchat'; @@ -192,7 +192,7 @@ export class RocketChatIntegrationHandler { message.channel = `#${ tmpRoom._id }`; } - message = processWebhookMessage(message, user, defaultValues, trigger); + message = processWebhookMessage(message, user, defaultValues); return message; } diff --git a/app/lib/server/functions/processWebhookMessage.js b/app/lib/server/functions/processWebhookMessage.js index c487bd84a89..cfa23e7f572 100644 --- a/app/lib/server/functions/processWebhookMessage.js +++ b/app/lib/server/functions/processWebhookMessage.js @@ -1,7 +1,6 @@ import { Meteor } from 'meteor/meteor'; import _ from 'underscore'; import s from 'underscore.string'; -import mem from 'mem'; import { getRoomByNameOrIdWithOptionToJoin } from './getRoomByNameOrIdWithOptionToJoin'; import { sendMessage } from './sendMessage'; @@ -9,14 +8,7 @@ import { validateRoomMessagePermissions } from '../../../authorization/server/fu import { SystemLogger } from '../../../../server/lib/logger/system'; import { getDirectMessageByIdWithOptionToJoin, getDirectMessageByNameOrIdWithOptionToJoin } from './getDirectMessageByNameOrIdWithOptionToJoin'; -// show deprecation warning only once per hour for each integration -const showDeprecation = mem(({ integration, channels, username }, error) => { - console.warn(`Warning: The integration "${ integration }" failed to send a message to "${ [].concat(channels).join(',') }" because user "${ username }" doesn't have permission or is not a member of the channel.`); - console.warn('This behavior is deprecated and starting from version v4.0.0 the following error will be thrown and the message will not be sent.'); - SystemLogger.error(error); -}, { maxAge: 360000, cacheKey: (integration) => JSON.stringify(integration) }); - -export const processWebhookMessage = function(messageObj, user, defaultValues = { channel: '', alias: '', avatar: '', emoji: '' }, integration = null) { +export const processWebhookMessage = function(messageObj, user, defaultValues = { channel: '', alias: '', avatar: '', emoji: '' }) { const sentData = []; const channels = [].concat(messageObj.channel || messageObj.roomId || defaultValues.channel); @@ -87,18 +79,7 @@ export const processWebhookMessage = function(messageObj, user, defaultValues = } } - try { - validateRoomMessagePermissions(room, { uid: user._id, ...user }); - } catch (error) { - if (!integration) { - throw error; - } - showDeprecation({ - integration: integration.name, - channels: integration.channel, - username: integration.username, - }, error); - } + validateRoomMessagePermissions(room, { uid: user._id, ...user }); const messageReturn = sendMessage(user, message, room); sentData.push({ channel, message: messageReturn });