diff --git a/src/fireedge/src/server/routes/websockets/hooks/index.js b/src/fireedge/src/server/routes/websockets/hooks/index.js index d3788ae02f..9792c73a96 100644 --- a/src/fireedge/src/server/routes/websockets/hooks/index.js +++ b/src/fireedge/src/server/routes/websockets/hooks/index.js @@ -20,7 +20,7 @@ const { messageTerminal } = require('server/utils/general') const { middlewareValidateAuthWebsocket, middlewareValidateResourceForHookConnection, - validateAuthWebsocket, + getResourceForHookConnection, getDataZone, returnQueryData } = require('server/utils/server') @@ -31,16 +31,14 @@ const main = (app = {}, type = '') => { .use(middlewareValidateAuthWebsocket) .use(middlewareValidateResourceForHookConnection) .on('connection', (server = {}) => { - const { zone: queryZone, id, resource } = returnQueryData(server) - const { aud: username } = validateAuthWebsocket(server) - console.log('data: ', username, id, resource) + const { id, resource } = getResourceForHookConnection(server) + const { zone: queryZone } = returnQueryData(server) const zone = queryZone && queryZone !== 'undefined' ? queryZone : '0' const dataZone = getDataZone(zone) - // aca colocar la validacion del recurso con global.user (necesitas buscar el nombre del usuario, id y resource) if (dataZone && dataZone.zeromq) { const zeromqSock = socketZeroMQ('sub') zeromqSock.connect(dataZone.zeromq) - zeromqSock.subscribe('') + zeromqSock.subscribe(`EVENT ${resource.toUpperCase()} ${id}/`) server.on('disconnect', function () { zeromqSock.close() }) diff --git a/src/fireedge/src/server/utils/server.js b/src/fireedge/src/server/utils/server.js index 992a02e7f9..129ab89631 100644 --- a/src/fireedge/src/server/utils/server.js +++ b/src/fireedge/src/server/utils/server.js @@ -14,6 +14,7 @@ /* -------------------------------------------------------------------------- */ const { env } = require('process') const { Map } = require('immutable') +const { global } = require('window-or-global') const { existsSync, readFileSync, createWriteStream } = require('fs-extra') const { internalServerError } = require('./constants/http-codes') const { messageTerminal } = require('server/utils/general') @@ -83,10 +84,25 @@ const validateAuthWebsocket = (server = {}) => { return rtn } -const middlewareValidateResourceForHookConnection = (server = {}, next = () => undefined) => { +const getResourceForHookConnection = (server = {}) => { const { id, resource } = returnQueryData(server) const { aud: username } = validateAuthWebsocket(server) - if (id && resource && username) { + return { id, resource, username } +} + +const middlewareValidateResourceForHookConnection = (server = {}, next = () => undefined) => { + const { id, resource, username } = getResourceForHookConnection(server) + if ( + id && + resource && + username && + global && + global.users && + global.users[username] && + global.users[username].resourcesHooks && + global.users[username].resourcesHooks[resource.toLowerCase()] >= 0 && + global.users[username].resourcesHooks[resource.toLowerCase()] === parseInt(id, 10) + ) { next() } else { server.disconnect(true) @@ -258,7 +274,7 @@ module.exports = { parsePostData, getParamsForObject, returnQueryData, - validateAuthWebsocket, + getResourceForHookConnection, middlewareValidateAuthWebsocket, middlewareValidateResourceForHookConnection }