From 5f7835e2d56dad6cd178b6064fee364c0c8b60a0 Mon Sep 17 00:00:00 2001 From: italo <italojmf@gmail.com> Date: Tue, 12 Sep 2017 18:42:38 +0000 Subject: [PATCH] Feature: Change meetingid tracking to match bbb-2.0 messages --- bbb-webhooks/web_hooks.js | 44 +++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/bbb-webhooks/web_hooks.js b/bbb-webhooks/web_hooks.js index 6ce6bd4847..8461e23c59 100644 --- a/bbb-webhooks/web_hooks.js +++ b/bbb-webhooks/web_hooks.js @@ -79,24 +79,40 @@ module.exports = class WebHooks { let hooks = Hook.allGlobalSync(); // Add hooks for the specific meeting that expect raw data - if (message[config.webhooks.rawPath] != null) { - // Get meetingId for a raw message that was previously mapped by another webhook application or if it's straight from redis (configurable) - switch (config.webhooks.rawPath) { - case "payload": idFromMessage = message[config.webhooks.rawPath][config.webhooks.meetingID]; break; - case "data": idFromMessage = message[config.webhooks.rawPath].attributes.meeting[config.webhooks.meetingID]; break; - } - } + // Get meetingId for a raw message that was previously mapped by another webhook application or if it's straight from redis + idFromMessage = this._findMeetingID(message); if (idFromMessage != null) { const eMeetingID = IDMapping.getExternalMeetingID(idFromMessage); hooks = hooks.concat(Hook.findByExternalMeetingIDSync(eMeetingID)); // Notify the hooks that expect raw data - async.forEach(hooks, function(hook) { - if (hook.getRaw) { Logger.info("[WebHooks] enqueueing a raw message in the hook:", hook.callbackURL); } - if (hook.getRaw) { hook.enqueue(message); } + async.forEach(hooks, (hook) => { + if (hook.getRaw) { + Logger.info("[WebHooks] enqueueing a raw message in the hook:", hook.callbackURL); + hook.enqueue(message); + } }); } // Put foreach inside the if to avoid pingpong events } + _findMeetingID(message) { + if (message.data) { + return message.data.attributes.meeting["internal-meeting-id"]; + } + if (message.payload) { + return message.payload.meeting_id; + } + if (message.envelope && message.envelope.routing && message.envelope.routing.meetingId) { + return message.envelope.routing.meetingId; + } + if (message.header && message.header.body && message.header.body.meetingId) { + return message.header.body.meetingId; + } + if (message.core && message.core.body) { + return message.core.body.props ? message.core.body.props.meetingProp.intId : message.core.body.meetingId; + } + return undefined; + } + // Processes an event received from redis. Will get all hook URLs that // should receive this event and start the process to perform the callback. _processEvent(message, raw) { @@ -112,9 +128,11 @@ module.exports = class WebHooks { } // Notify every hook asynchronously, if hook N fails, it won't block hook N+k from receiving its message - async.forEach(hooks, function(hook) { - if (!hook.getRaw) { Logger.info("[WebHooks] enqueueing a message in the hook:", hook.callbackURL); } - if (!hook.getRaw) { hook.enqueue(message); } + async.forEach(hooks, (hook) => { + if (!hook.getRaw) { + Logger.info("[WebHooks] enqueueing a message in the hook:", hook.callbackURL); + hook.enqueue(message); + } }); const sendRaw = hooks.some(hook => { return hook.getRaw }); -- GitLab