1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-16 22:50:10 +03:00

M #~: subcribe to individual resource

Signed-off-by: Jorge Lobo <jlobo@opennebula.io>
This commit is contained in:
Jorge Lobo 2021-06-21 16:36:04 +02:00
parent 2583ba3d0a
commit 628cdb7cab
No known key found for this signature in database
GPG Key ID: 9C21660F7B06905E
2 changed files with 23 additions and 9 deletions

View File

@ -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()
})

View File

@ -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
}