Files
stf-DeviceFarmer-1/lib/util/lockutil.js
Denis Barbaron 51b86a87ef fix bug on taking control of a device: set a lock for exclusive access (#650)
* fix bug on taking control of a device: set a lock for exclusive access

Signed-off-by: Denis barbaron <denis.barbaron@orange.com>

* update the locking function

Signed-off-by: Denis barbaron <denis.barbaron@orange.com>

---------

Signed-off-by: Denis barbaron <denis.barbaron@orange.com>
2023-04-03 20:05:49 +02:00

72 lines
1.8 KiB
JavaScript

/**
* Copyright © 2019,2023 code initially contributed by Orange SA, authors: Denis Barbaron - Licensed under the Apache license 2.0
**/
const apiutil = require('./apiutil')
const dbapi = require('../db/api')
const lockutil = Object.create(null)
lockutil.unlockDevice = function(lock) {
if (lock.device) {
dbapi.unlockDevice(lock.device.serial)
}
}
lockutil.lockUser = function(email, res, lock) {
return dbapi.lockUser(email)
.then(function(stats) {
return apiutil.computeStats(res, stats, 'user', lock)
})
}
lockutil.unlockUser = function(lock) {
if (lock.user) {
dbapi.unlockUser(lock.user.email)
}
}
lockutil.lockGroupAndUser = function(req, res, lock) {
return lockutil.lockGroup(req, res, lock).then(function(lockingSuccessed) {
return lockingSuccessed ?
lockutil.lockUser(req.user.email, res, lock) :
false
})
}
lockutil.unlockGroupAndUser = function(lock) {
lockutil.unlockGroup(lock)
lockutil.unlockUser(lock)
}
lockutil.lockGroup = function(req, res, lock) {
const id = req.swagger.params.id.value
const email = req.user.email
return dbapi.lockGroupByOwner(email, id).then(function(stats) {
return apiutil.computeStats(res, stats, 'group', lock)
})
}
lockutil.unlockGroup = function(lock) {
if (lock.group) {
dbapi.unlockGroup(lock.group.id)
}
}
lockutil.unlockGroupAndDevice = function(lock) {
lockutil.unlockGroup(lock)
lockutil.unlockDevice(lock)
}
lockutil.lockGenericDevice = function(req, res, lock, lockDevice) {
return lockDevice(req.user.groups.subscribed,
req.hasOwnProperty('body') ? req.body.serial : req.swagger.params.serial.value)
.then(function(stats) {
return apiutil.computeStats(res, stats, 'device', lock)
})
}
module.exports = lockutil