summaryrefslogtreecommitdiffstats
path: root/server/api/groups.js
diff options
context:
space:
mode:
authorUdo Walter2019-02-23 09:35:27 +0100
committerUdo Walter2019-02-23 09:35:27 +0100
commit461549c117c9760392debae54bb8c7a1ed66b807 (patch)
treea45beb1d249d364a83bf8d1685d9bc7fda7d5915 /server/api/groups.js
parent[Account] Add password change functionality (diff)
downloadbas-461549c117c9760392debae54bb8c7a1ed66b807.tar.gz
bas-461549c117c9760392debae54bb8c7a1ed66b807.tar.xz
bas-461549c117c9760392debae54bb8c7a1ed66b807.zip
[groups] add iprange functionality to groups; add refresh button
Diffstat (limited to 'server/api/groups.js')
-rw-r--r--server/api/groups.js40
1 files changed, 37 insertions, 3 deletions
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()