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:
parent
2583ba3d0a
commit
628cdb7cab
@ -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()
|
||||
})
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user