From 461549c117c9760392debae54bb8c7a1ed66b807 Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Sat, 23 Feb 2019 08:35:27 +0000 Subject: [groups] add iprange functionality to groups; add refresh button --- server/api/groups.js | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'server/api/groups.js') diff --git a/server/api/groups.js b/server/api/groups.js index 40d2591..c869800 100644 --- a/server/api/groups.js +++ b/server/api/groups.js @@ -9,6 +9,12 @@ var router = decorateApp(express.Router()) // ############################################################################ // ########################### GET requests ################################# +router.getAsync('/test', async (req, res) => { + const group = await db.group.create({ name: 'yxcv' }) + console.log(group.ipranges) + res.send(group) +}) + router.getAsync('', async (req, res) => { const groups = await db.group.findAll({ order: [['name', 'ASC']] }) res.send(groups) @@ -17,7 +23,7 @@ router.getAsync('', async (req, res) => { router.getAsync('/:id', async (req, res) => { const all = req.query.all !== undefined && req.query.all !== 'false' if (req.params.id > 0) { - const group = await db.group.findOne({ where: { id: req.params.id }, include: ['parents', 'subgroups', 'clients'] }) + const group = await db.group.findOne({ where: { id: req.params.id }, include: ['parents', 'ipranges', 'subgroups', 'clients'] }) if (group) { if (all) res.status(200).send({ ...group.get({ plain: true }), ...await groupUtil.getAllChildren([group]) }) else res.status(200).send(group) @@ -44,11 +50,39 @@ router.postAsync(['', '/:id'], async (req, res) => { let group if (req.params.id === undefined) group = await db.group.create(req.body.data) else { - group = await db.group.findOne({ where: { id: req.params.id } }) + group = await db.group.findOne({ where: { id: req.params.id }, include: ['ipranges'] }) if (group) await group.update(req.body.data) } if (group) { - await group.setParents(req.body.parentIds) + const promises = [] + // Set group parents + if (Array.isArray(req.body.parentIds)) promises.push(group.setParents(req.body.parentIds)) + // Update, create or destroy ipranges + if (Array.isArray(req.body.ipranges)) { + // Get the ipranges of the group an create a id -> iprange map of them + const iprangeIdMap = {} + if (group.ipranges) { + group.ipranges.forEach(iprange => { + iprangeIdMap[iprange.id] = iprange + }) + } + // Update existing ipranges and create the new ones + req.body.ipranges.forEach(iprange => { + if (iprange.id) { + if (iprangeIdMap[iprange.id]) { + promises.push(iprangeIdMap[iprange.id].update(iprange)) + delete iprangeIdMap[iprange.id] + } + } else { + promises.push(group.createIprange(iprange)) + } + }) + // Destroy the deleted ipranges + for (let id in iprangeIdMap) { + promises.push(iprangeIdMap[id].destroy()) + } + } + await Promise.all(promises) res.status(200).send({ id: group.id }) } else { res.status(404).end() -- cgit v1.2.3-55-g7522