mirror of
https://github.com/DeviceFarmer/stf.git
synced 2026-04-19 00:23:25 +02:00
* fix bug on email separator Signed-off-by: Denis barbaron <denis.barbaron@orange.com> * allow group name change Signed-off-by: Denis barbaron <denis.barbaron@orange.com> * add maintenance banner on UI Signed-off-by: Denis barbaron <denis.barbaron@orange.com> * removes unnecessary comments Signed-off-by: Denis barbaron <denis.barbaron@orange.com> --------- Signed-off-by: Denis barbaron <denis.barbaron@orange.com>
101 lines
3.0 KiB
JavaScript
101 lines
3.0 KiB
JavaScript
/**
|
|
* Copyright © 2019-2024 code initially contributed by Orange SA, authors: Denis Barbaron - Licensed under the Apache license 2.0
|
|
**/
|
|
|
|
const timeutil = require('../../../util/timeutil')
|
|
const r = require('rethinkdb')
|
|
const _ = require('lodash')
|
|
const logger = require('../../../util/logger')
|
|
const wireutil = require('../../../wire/util')
|
|
const wire = require('../../../wire')
|
|
const db = require('../../../db')
|
|
|
|
module.exports = function(pushdev) {
|
|
const log = logger.createLogger('watcher-users')
|
|
|
|
function sendUserChange(user, isAddedGroup, groups, action, targets) {
|
|
pushdev.send([
|
|
wireutil.global
|
|
, wireutil.envelope(
|
|
new wire.UserChangeMessage(
|
|
user
|
|
, isAddedGroup
|
|
, groups
|
|
, action
|
|
, targets
|
|
, timeutil.now('nano')))
|
|
])
|
|
}
|
|
|
|
db.run(r
|
|
.table('users')
|
|
.pluck(
|
|
'email'
|
|
, 'name'
|
|
, 'privilege'
|
|
, {groups: ['quotas', 'subscribed']}
|
|
, {settings: ['alertMessage']}
|
|
)
|
|
.changes(), function(err, cursor) {
|
|
if (err) {
|
|
throw err
|
|
}
|
|
return cursor
|
|
})
|
|
.then(function(cursor) {
|
|
cursor.each(function(err, data) {
|
|
if (err) {
|
|
throw err
|
|
}
|
|
if (data.old_val === null) {
|
|
sendUserChange(data.new_val, false, [], 'created', ['settings'])
|
|
}
|
|
else if (data.new_val === null) {
|
|
sendUserChange(data.old_val, false, [], 'deleted', ['settings'])
|
|
}
|
|
else {
|
|
const targets = []
|
|
|
|
if (!_.isEqual(
|
|
data.new_val.groups.quotas.allocated
|
|
, data.old_val.groups.quotas.allocated)) {
|
|
targets.push('settings')
|
|
targets.push('view')
|
|
}
|
|
else if (!_.isEqual(
|
|
data.new_val.groups.quotas.consumed
|
|
, data.old_val.groups.quotas.consumed)) {
|
|
targets.push('view')
|
|
}
|
|
else if (data.new_val.groups.quotas.defaultGroupsNumber !==
|
|
data.old_val.groups.quotas.defaultGroupsNumber ||
|
|
data.new_val.groups.quotas.defaultGroupsDuration !==
|
|
data.old_val.groups.quotas.defaultGroupsDuration ||
|
|
data.new_val.groups.quotas.defaultGroupsRepetitions !==
|
|
data.old_val.groups.quotas.defaultGroupsRepetitions ||
|
|
data.new_val.groups.quotas.repetitions !==
|
|
data.old_val.groups.quotas.repetitions ||
|
|
!_.isEqual(data.new_val.groups.subscribed, data.old_val.groups.subscribed)) {
|
|
targets.push('settings')
|
|
}
|
|
else if (!_.isEqual(
|
|
data.new_val.settings.alertMessage
|
|
, data.old_val.settings.alertMessage)) {
|
|
targets.push('menu')
|
|
}
|
|
if (targets.length) {
|
|
sendUserChange(
|
|
data.new_val
|
|
, data.new_val.groups.subscribed.length > data.old_val.groups.subscribed.length
|
|
, _.xor(data.new_val.groups.subscribed, data.old_val.groups.subscribed)
|
|
, 'updated'
|
|
, targets)
|
|
}
|
|
}
|
|
})
|
|
})
|
|
.catch(function(err) {
|
|
log.error('An error occured during USERS table watching', err.stack)
|
|
})
|
|
}
|