From 95ae9a051d7cab018a4ccfef4cd6140000076bb8 Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Mon, 15 Apr 2019 14:37:33 +0000 Subject: [server] grouputils -> grouphelper --- server/api/events.js | 4 ++-- server/api/groups.js | 4 ++-- server/lib/grouphelper.js | 43 +++++++++++++++++++++++++++++++++++++++++++ server/lib/grouputil.js | 35 ----------------------------------- 4 files changed, 47 insertions(+), 39 deletions(-) create mode 100644 server/lib/grouphelper.js delete mode 100644 server/lib/grouputil.js (limited to 'server') diff --git a/server/api/events.js b/server/api/events.js index 5affbb0..63c25bc 100644 --- a/server/api/events.js +++ b/server/api/events.js @@ -1,7 +1,7 @@ /* global __appdir */ var path = require('path') var db = require(path.join(__appdir, 'lib', 'sequelize')) -var groupUtil = require(path.join(__appdir, 'lib', 'grouputil')) +var groupHelper = require(path.join(__appdir, 'lib', 'grouphelper')) var express = require('express') const { decorateApp } = require('@awaitjs/express') var router = decorateApp(express.Router()) @@ -35,7 +35,7 @@ router.getAsync('', async (req, res) => { */ router.postAsync('/blacklist', async (req, res) => { if (req.body.groups) { - var blacklist = await groupUtil.getAllChildren(req.body.groups) + var blacklist = await groupHelper.getAllChildren(req.body.groupHelper) res.send(blacklist) } else res.status(404).end() }) diff --git a/server/api/groups.js b/server/api/groups.js index a19c231..633b63d 100644 --- a/server/api/groups.js +++ b/server/api/groups.js @@ -1,7 +1,7 @@ /* global __appdir */ const path = require('path') const db = require(path.join(__appdir, 'lib', 'sequelize')) -const groupUtil = require(path.join(__appdir, 'lib', 'grouputil')) +const groupHelper = require(path.join(__appdir, 'lib', 'grouphelper')) const ipHelper = require(path.join(__appdir, 'lib', 'iphelper')) const express = require('express') const { decorateApp } = require('@awaitjs/express') @@ -27,7 +27,7 @@ router.getAsync('/:id', async (req, res) => { iprange.startIp = ipHelper.toIPv4(iprange.startIp) iprange.endIp = ipHelper.toIPv4(iprange.endIp) }) - if (all) res.status(200).send({ ...group.get({ plain: true }), ...await groupUtil.getAllChildren([group]) }) + if (all) res.status(200).send({ ...group.get({ plain: true }), ...await groupHelper.getAllChildren([group]) }) else res.status(200).send(group) } else { return HttpResponse.notFound(req.params.id).send(res) diff --git a/server/lib/grouphelper.js b/server/lib/grouphelper.js new file mode 100644 index 0000000..417c1d1 --- /dev/null +++ b/server/lib/grouphelper.js @@ -0,0 +1,43 @@ +/* global __appdir */ +var path = require('path') +var db = require(path.join(__appdir, 'lib', 'sequelize')) + +async function getAllChildren (groups, groupBlacklist, clientBlacklist) { + const knownGroupMap = {} + const knownClientMap = {} + if (groupBlacklist) groupBlacklist.forEach(group => { + knownGroupMap[group.id] = true + }) + if (clientBlacklist) clientBlacklist.forEach(client => { + knownGroupMap[client.id] = true + }) + return getAllChildrenByIds(groups.map(x => x.id), {}, {}) +} + +async function getAllChildrenByIds (groupIds, knownGroupMap, knownClientMap) { + let [subgroups, clients] = await Promise.all([ + db.group.findAll({ where: { '$parents.id$': groupIds }, include: ['parents'] }), + db.client.findAll({ where: { '$groups.id$': groupIds }, include: ['groups'] }) + ]) + + subgroups = subgroups.filter(subgroup => !knownGroupMap[subgroup.id]) + clients = clients.filter(client => !knownClientMap[client.id]) + + if (subgroups.length > 0) { + let groupIds = subgroups.map(x => x.id) + for (let i in groupIds) { + knownGroupMap[groupIds[i]] = true + } + let clientIds = clients.map(x => x.id) + for (let i in clientIds) { + knownClientMap[clientIds[i]] = true + } + let subChildren = await getAllChildrenByIds(groupIds, knownGroupMap, knownClientMap) + subgroups = [...subgroups, ...subChildren.subgroups] + clients = [...clients, ...subChildren.clients] + } + + return { subgroups, clients } +} + +module.exports = { getAllChildren } diff --git a/server/lib/grouputil.js b/server/lib/grouputil.js deleted file mode 100644 index 8db0c49..0000000 --- a/server/lib/grouputil.js +++ /dev/null @@ -1,35 +0,0 @@ -/* global __appdir */ -var path = require('path') -var db = require(path.join(__appdir, 'lib', 'sequelize')) - -async function getAllChildren (groups) { - return getAllChildrenByIds(groups.map(x => x.id), {}, {}) -} - -async function getAllChildrenByIds (groupIds, knownGroupMap, knownClientMap) { - let [subgroups, clients] = await Promise.all([ - db.group.findAll({ where: { '$parents.id$': groupIds }, include: ['parents'] }), - db.client.findAll({ where: { '$groups.id$': groupIds }, include: ['groups'] }) - ]) - - subgroups = subgroups.filter(subgroup => !knownGroupMap[subgroup.id]) - clients = clients.filter(client => !knownClientMap[client.id]) - - if (subgroups.length > 0) { - let groupIds = subgroups.map(x => x.id) - for (let i in groupIds) { - knownGroupMap[groupIds[i]] = true - } - let clientIds = clients.map(x => x.id) - for (let i in clientIds) { - knownClientMap[clientIds[i]] = true - } - let subChildren = await getAllChildrenByIds(groupIds, knownGroupMap, knownClientMap) - subgroups = [...subgroups, ...subChildren.subgroups] - clients = [...clients, ...subChildren.clients] - } - - return { subgroups, clients } -} - -module.exports.getAllChildren = getAllChildren -- cgit v1.2.3-55-g7522