mirror of
https://github.com/openstf/stf
synced 2025-10-05 10:39:25 +02:00
add groups feature
This commit is contained in:
parent
6fd750dad5
commit
7f5dc4c152
119 changed files with 12416 additions and 402 deletions
|
@ -1,3 +1,7 @@
|
|||
/**
|
||||
* Copyright © 2019 contains code contributed by Orange SA, authors: Denis Barbaron - Licensed under the Apache license 2.0
|
||||
**/
|
||||
|
||||
var http = require('http')
|
||||
var events = require('events')
|
||||
var util = require('util')
|
||||
|
@ -23,6 +27,8 @@ var ip = require('./middleware/remote-ip')
|
|||
var auth = require('./middleware/auth')
|
||||
var jwtutil = require('../../util/jwtutil')
|
||||
|
||||
const apiutil = require('../../util/apiutil')
|
||||
|
||||
module.exports = function(options) {
|
||||
var log = logger.createLogger('websocket')
|
||||
var server = http.createServer()
|
||||
|
@ -118,23 +124,99 @@ module.exports = function(options) {
|
|||
}
|
||||
}
|
||||
|
||||
let disconnectSocket
|
||||
var messageListener = wirerouter()
|
||||
.on(wire.UpdateAccessTokenMessage, function() {
|
||||
socket.emit('user.keys.accessToken.updated')
|
||||
})
|
||||
.on(wire.DeleteUserMessage, function() {
|
||||
disconnectSocket(true)
|
||||
})
|
||||
.on(wire.DeviceChangeMessage, function(channel, message) {
|
||||
if (user.groups.subscribed.indexOf(message.device.group.origin) > -1 ||
|
||||
user.groups.subscribed.indexOf(message.oldOriginGroupId) > -1) {
|
||||
socket.emit('user.settings.devices.' + message.action, message)
|
||||
}
|
||||
})
|
||||
.on(wire.UserChangeMessage, function(channel, message) {
|
||||
Promise.map(message.targets, function(target) {
|
||||
socket.emit('user.' + target + '.users.' + message.action, message)
|
||||
})
|
||||
})
|
||||
.on(wire.GroupChangeMessage, function(channel, message) {
|
||||
if (user.privilege === 'admin' ||
|
||||
user.email === message.group.owner.email ||
|
||||
!apiutil.isOriginGroup(message.group.class) &&
|
||||
(message.action === 'deleted' ||
|
||||
message.action === 'updated' &&
|
||||
(message.isChangedDates || message.isChangedClass || message.devices.length))) {
|
||||
socket.emit('user.settings.groups.' + message.action, message)
|
||||
}
|
||||
if (message.subscribers.indexOf(user.email) > -1) {
|
||||
socket.emit('user.view.groups.' + message.action, message)
|
||||
}
|
||||
})
|
||||
.on(wire.DeviceGroupChangeMessage, function(channel, message) {
|
||||
if (user.groups.subscribed.indexOf(message.id) > -1) {
|
||||
if (user.groups.subscribed.indexOf(message.group.id) > -1) {
|
||||
socket.emit('device.updateGroupDevice', {
|
||||
important: true
|
||||
, data: {
|
||||
serial: message.serial
|
||||
, group: message.group
|
||||
}
|
||||
})
|
||||
}
|
||||
else {
|
||||
socket.emit('device.removeGroupDevices', {important: true, devices: [message.serial]})
|
||||
}
|
||||
}
|
||||
else if (user.groups.subscribed.indexOf(message.group.id) > -1) {
|
||||
socket.emit('device.addGroupDevices', {important: true, devices: [message.serial]})
|
||||
}
|
||||
})
|
||||
.on(wire.GroupUserChangeMessage, function(channel, message) {
|
||||
if (message.users.indexOf(user.email) > -1) {
|
||||
if (message.isAdded) {
|
||||
user.groups.subscribed = _.union(user.groups.subscribed, [message.id])
|
||||
if (message.devices.length) {
|
||||
socket.emit('device.addGroupDevices', {important: true, devices: message.devices})
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (message.devices.length) {
|
||||
socket.emit('device.removeGroupDevices', {important: true, devices: message.devices})
|
||||
}
|
||||
if (message.isDeletedLater) {
|
||||
setTimeout(function() {
|
||||
user.groups.subscribed = _.without(user.groups.subscribed, message.id)
|
||||
}, 5000)
|
||||
}
|
||||
else {
|
||||
user.groups.subscribed = _.without(user.groups.subscribed, message.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.on(wire.DeviceLogMessage, function(channel, message) {
|
||||
socket.emit('device.log', message)
|
||||
})
|
||||
.on(wire.DeviceIntroductionMessage, function(channel, message) {
|
||||
socket.emit('device.add', {
|
||||
important: true
|
||||
, data: {
|
||||
serial: message.serial
|
||||
, present: false
|
||||
, provider: message.provider
|
||||
, owner: null
|
||||
, status: message.status
|
||||
, ready: false
|
||||
, reverseForwards: []
|
||||
}
|
||||
})
|
||||
if (user.groups.subscribed.indexOf(message.group.id) > -1) {
|
||||
socket.emit('device.add', {
|
||||
important: true
|
||||
, data: {
|
||||
serial: message.serial
|
||||
, present: true
|
||||
, provider: message.provider
|
||||
, owner: null
|
||||
, status: message.status
|
||||
, ready: false
|
||||
, reverseForwards: []
|
||||
, group: message.group
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
.on(wire.DeviceReadyMessage, function(channel, message) {
|
||||
socket.emit('device.change', {
|
||||
|
@ -307,6 +389,7 @@ module.exports = function(options) {
|
|||
joinChannel(user.group)
|
||||
|
||||
new Promise(function(resolve) {
|
||||
disconnectSocket = resolve
|
||||
socket.on('disconnect', resolve)
|
||||
// Global messages for all clients using socket.io
|
||||
//
|
||||
|
@ -314,15 +397,19 @@ module.exports = function(options) {
|
|||
.on('device.note', function(data) {
|
||||
return dbapi.setDeviceNote(data.serial, data.note)
|
||||
.then(function() {
|
||||
return dbapi.loadDevice(data.serial)
|
||||
return dbapi.loadDevice(user.groups.subscribed, data.serial)
|
||||
})
|
||||
.then(function(device) {
|
||||
if (device) {
|
||||
io.emit('device.change', {
|
||||
important: true
|
||||
, data: {
|
||||
serial: device.serial
|
||||
, notes: device.notes
|
||||
.then(function(cursor) {
|
||||
if (cursor) {
|
||||
cursor.next(function(err, device) {
|
||||
if (!err) {
|
||||
io.emit('device.change', {
|
||||
important: true
|
||||
, data: {
|
||||
serial: device.serial
|
||||
, notes: device.notes
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -364,7 +451,7 @@ module.exports = function(options) {
|
|||
.on('user.keys.accessToken.remove', function(data) {
|
||||
return dbapi.removeUserAccessToken(user.email, data.title)
|
||||
.then(function() {
|
||||
socket.emit('user.keys.accessToken.removed', data.title)
|
||||
socket.emit('user.keys.accessToken.updated')
|
||||
})
|
||||
})
|
||||
.on('user.keys.adb.add', function(data) {
|
||||
|
@ -916,6 +1003,7 @@ module.exports = function(options) {
|
|||
channelRouter.removeListener(channel, messageListener)
|
||||
sub.unsubscribe(channel)
|
||||
})
|
||||
socket.disconnect(true)
|
||||
})
|
||||
.catch(function(err) {
|
||||
// Cannot guarantee integrity of client
|
||||
|
@ -923,8 +1011,7 @@ module.exports = function(options) {
|
|||
'Client had an error, disconnecting due to probable loss of integrity'
|
||||
, err.stack
|
||||
)
|
||||
|
||||
socket.disconnect(true)
|
||||
// move 'socket.disconnect(true)' statement to finally block instead!
|
||||
})
|
||||
})
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue