summaryrefslogtreecommitdiffstats
path: root/server/api/roles.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/api/roles.js')
-rw-r--r--server/api/roles.js78
1 files changed, 76 insertions, 2 deletions
diff --git a/server/api/roles.js b/server/api/roles.js
index f4803cf..5b878f0 100644
--- a/server/api/roles.js
+++ b/server/api/roles.js
@@ -4,6 +4,8 @@ var db = require(path.join(__appdir, 'lib', 'sequelize'))
var express = require('express')
const { decorateApp } = require('@awaitjs/express')
var router = decorateApp(express.Router())
+const HttpResponse = require(path.join(__appdir, 'lib', 'httpresponse'))
+const log = require(path.join(__appdir, 'lib', 'log'))
/*
* /<ROLE_ID>
@@ -44,8 +46,58 @@ router.postAsync(['', '/:id'], async (req, res) => {
// ?delete Delete the roles
if (req.query.delete !== undefined && req.query.delete !== 'false') {
- await db.role.destroy({ where: { id: req.body.ids } })
- res.status(200).send('success')
+ const user = await db.user.findOne({ where: { id: req.user.id } })
+
+ // Only need to log batch request if there is more than one event to delete.
+ if (req.body.ids.length > 1) {
+ await log({
+ category: 'ROLE_BATCH_DELETE',
+ description: 'Role batch deletion of ' + req.body.ids.length + ' roles initiated by user.',
+ user,
+ userId: req.user.id
+ })
+ }
+
+ let deletionCounter = 0
+ // Delete every event on its own, to get a better log
+ for (let index in req.body.ids) {
+ const role = await db.role.findOne({ where: { id: req.body.ids[index] } })
+ const count = await db.role.destroy({ where: { id: req.body.ids[index] } })
+
+ if (count !== 1) {
+ await log({
+ category: 'ERROR_ROLE_DELETE',
+ description: '[' + role.id + '] ' + role.name + ': Role could not be deleted.\n' +
+ 'ID: ' + role.id + '\n' +
+ 'Name: ' + role.name + '\n' +
+ 'Description: ' + role.descr + '\n',
+ user,
+ userId: req.user.id
+ })
+ } else {
+ await log({
+ category: 'ROLE_DELETE',
+ description: '[' + role.id + '] ' + role.name + ': Role successfully deleted.\n' +
+ 'ID: ' + role.id + '\n' +
+ 'Name: ' + role.name + '\n' +
+ 'Description: ' + role.descr + '\n',
+ user,
+ userId: req.user.id
+ })
+ deletionCounter++
+ }
+ }
+ if (req.body.ids.length > 1) {
+ log({
+ category: 'ROLE_BATCH_DELETE',
+ description: deletionCounter + '/' + req.body.ids.length + ' roles successfully deleted.',
+ user,
+ userId: req.user.id
+ })
+ }
+ HttpResponse.successBatch('deleted', 'role', deletionCounter).send(res)
+
+ // res.status(200).send('success')
} else {
var promises = []
var roleDb
@@ -56,6 +108,17 @@ router.postAsync(['', '/:id'], async (req, res) => {
promises.push(roleDb.addGroups(req.body.groups, { through: { blacklist: 0 } }))
promises.push(roleDb.addGroups(req.body.blacklist, { through: { blacklist: 1 } }))
await Promise.all(promises)
+ log({
+ category: 'ROLE_CREATE',
+ description: '[' + roleDb.id + '] ' + roleDb.name + ': Event successfully created.\n' +
+ 'ID: ' + roleDb.id + '\n' +
+ 'Name: ' + roleDb.name + '\n' +
+ 'Description: ' + roleDb.descr + '\n' +
+ 'Permissions: ' + req.body.permissions + '\n' +
+ 'Groups: ' + req.body.groups + '\n' +
+ 'Blacklist: ' + req.body.blacklist,
+ userId: req.user.id
+ })
res.send({ id: req.body.id })
} else if (req.params.id > 0) {
// Update existing role
@@ -66,6 +129,17 @@ router.postAsync(['', '/:id'], async (req, res) => {
promises.push(roleDb.setGroups(req.body.groups, { through: { blacklist: 0 } }))
promises.push(roleDb.addGroups(req.body.blacklist, { through: { blacklist: 1 } }))
await Promise.all(promises)
+ log({
+ category: 'ROLE_EDIT',
+ description: '[' + roleDb.id + '] ' + roleDb.name + ': Role successfully edited.\n' +
+ 'ID: ' + roleDb.id + '\n' +
+ 'Name: ' + roleDb.name + '\n' +
+ 'Description: ' + roleDb.descr + '\n' +
+ 'Permissions: ' + req.body.permissions + '\n' +
+ 'Groups: ' + req.body.groups + '\n' +
+ 'Blacklist: ' + req.body.blacklist,
+ userId: req.user.id
+ })
res.send({ id: req.params.id })
} else {
res.status(404).end()