summaryrefslogtreecommitdiffstats
path: root/server/api/ipranges.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/api/ipranges.js')
-rw-r--r--server/api/ipranges.js62
1 files changed, 59 insertions, 3 deletions
diff --git a/server/api/ipranges.js b/server/api/ipranges.js
index 2a40763..fe66fd5 100644
--- a/server/api/ipranges.js
+++ b/server/api/ipranges.js
@@ -6,6 +6,7 @@ const { decorateApp } = require('@awaitjs/express')
var router = decorateApp(express.Router())
const HttpResponse = require(path.join(__appdir, 'lib', 'httpresponse'))
const iphelper = require(path.join(__appdir, 'lib', 'iphelper'))
+const log = require(path.join(__appdir, 'lib', 'log'))
// ############################################################################
// ########################### GET requests #################################
@@ -35,8 +36,51 @@ router.getAsync('/:id', async (req, res) => {
router.postAsync(['', '/:id'], async (req, res) => {
if (req.query.delete !== undefined && req.query.delete !== 'false') {
if (!Array.isArray(req.body.ids)) return HttpResponse.invalidBodyValue('ids', 'an array').send(res)
- const count = await db.iprange.destroy({ where: { id: req.body.ids } })
- return HttpResponse.successBatch('deleted', 'client', count).send(res)
+
+ const user = await db.user.findOne({ where: { id: req.user.id } })
+
+ // Only need to log batch request if there is more than one client to delete.
+ if (req.body.ids.length > 1) {
+ await log({
+ category: 'IPRANGE_BATCH_DELETE',
+ description: 'IP range batch deletion of ' + req.body.ids.length + ' ip ranges initiated by user.',
+ user,
+ userId: req.user.id
+ })
+ }
+
+ let deletionCounter = 0
+ // Delete every iprange on its own, to get a better log
+ for (let index in req.body.ids) {
+ const iprange = await db.iprange.findOne({ where: { id: req.body.ids[index] } })
+ const count = await db.iprange.destroy({ where: { id: req.body.ids[index] } })
+ if (count !== 1) {
+ await log({
+ category: 'ERROR_IPRANGE_DELETE',
+ description: '[' + iprange.id + '] IP range from ' + iphelper.toIPv4(iprange.startIp) + ' to ' + iphelper.toIPv4(iprange.endIp) + ' could not be deleted.',
+ user,
+ userId: req.user.id
+ })
+ } else {
+ await log({
+ category: 'IPRANGE_DELETE',
+ description: '[' + iprange.id + '] IP range from ' + iphelper.toIPv4(iprange.startIp) + ' to ' + iphelper.toIPv4(iprange.endIp) + ' successfully deleted.',
+ user,
+ userId: req.user.id
+ })
+ deletionCounter++
+ }
+ }
+ if (req.body.ids.length > 1) {
+ log({
+ category: 'IPRANGE_BATCH_DELETE',
+ description: deletionCounter + '/' + req.body.ids.length + ' ip ranges successfully deleted.',
+ user,
+ userId: req.user.id
+ })
+ }
+
+ return HttpResponse.successBatch('deleted', 'client', deletionCounter).send(res)
}
let iprange
let action = 'updated'
@@ -44,11 +88,23 @@ router.postAsync(['', '/:id'], async (req, res) => {
req.body.endIp = iphelper.toDecimal(req.body.endIp)
if (req.params.id === undefined) {
iprange = await db.iprange.create(req.body)
+ await log({
+ category: 'IPRANGE_CREATE',
+ description: 'IP range from ' + iphelper.toIPv4(req.body.startIp) + ' to ' + iphelper.toIPv4(req.body.endIp) + ' successfully created',
+ userId: req.user.id
+ })
action = 'created'
} else if (req.params.id > 0) {
iprange = await db.iprange.findOne({ where: { id: req.params.id } })
if (!iprange) return HttpResponse.notFound(req.params.id).send(res)
- else await iprange.update(req.body)
+ else {
+ await iprange.update(req.body)
+ await log({
+ category: 'IPRANGE_EDIT',
+ description: '[' + iprange.id + '] IP range successfully edited from ' + iphelper.toIPv4(req.body.startIp) + ' to ' + iphelper.toIPv4(req.body.endIp),
+ userId: req.user.id
+ })
+ }
} else {
return HttpResponse.invalidId().send(res)
}