summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJannik Schönartz2019-03-31 15:55:33 +0200
committerJannik Schönartz2019-03-31 15:55:33 +0200
commit7cbb9c31c070d50afcd21c1d4c44b4c0678f49f5 (patch)
tree1cb5089eb17e44c0f56a549cd76aa200ea8584b9
parent[server/registration] Performance improvements & add automatic registration w... (diff)
parent[server/ipxeconfigs] eslint fixes (diff)
downloadbas-7cbb9c31c070d50afcd21c1d4c44b4c0678f49f5.tar.gz
bas-7cbb9c31c070d50afcd21c1d4c44b4c0678f49f5.tar.xz
bas-7cbb9c31c070d50afcd21c1d4c44b4c0678f49f5.zip
Merge because Udo committed eslint errors :|
-rw-r--r--server/api/groups.js62
-rw-r--r--server/api/ipxeentries.js28
-rw-r--r--server/lib/httpresponse.js6
3 files changed, 52 insertions, 44 deletions
diff --git a/server/api/groups.js b/server/api/groups.js
index 97e4808..99260ea 100644
--- a/server/api/groups.js
+++ b/server/api/groups.js
@@ -63,42 +63,40 @@ router.postAsync(['', '/:id'], async (req, res) => {
} else {
return httpResponse.invalidId(res)
}
- if (group) {
- 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 => {
- // Convert valid ip addresses to integer values.
- if (!ipHelper.isIPv4(iprange.startIp) || !ipHelper.isIPv4(iprange.endIp)) return
- iprange.startIp = ipHelper.toDecimal(iprange.startIp)
- iprange.endIp = ipHelper.toDecimal(iprange.endIp)
- if (iprange.id) {
- if (iprangeIdMap[iprange.id]) {
- promises.push(iprangeIdMap[iprange.id].update(iprange))
- delete iprangeIdMap[iprange.id]
- }
- } else {
- promises.push(group.createIprange(iprange))
- }
+ 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
})
- // Destroy the deleted ipranges
- for (let id in iprangeIdMap) {
- promises.push(iprangeIdMap[id].destroy())
+ }
+ // Update existing ipranges and create the new ones
+ req.body.ipranges.forEach(iprange => {
+ // Convert valid ip addresses to integer values.
+ if (!ipHelper.isIPv4(iprange.startIp) || !ipHelper.isIPv4(iprange.endIp)) return
+ iprange.startIp = ipHelper.toDecimal(iprange.startIp)
+ iprange.endIp = ipHelper.toDecimal(iprange.endIp)
+ 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)
- httpResponse.success(res, action, 'group', group.id)
}
+ await Promise.all(promises)
+ httpResponse.success(res, action, 'group', group.id)
}
})
diff --git a/server/api/ipxeentries.js b/server/api/ipxeentries.js
index d646f53..45cdc9d 100644
--- a/server/api/ipxeentries.js
+++ b/server/api/ipxeentries.js
@@ -4,6 +4,7 @@ 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'))
// ############################################################################
// ########################### GET requests #################################
@@ -14,9 +15,10 @@ router.getAsync('', async (req, res) => {
})
router.getAsync('/:id', async (req, res) => {
+ if (!(req.params.id > 0)) httpResponse.invalidId(res)
const entry = await db.entry.findOne({ where: { id: req.params.id } })
if (entry) res.status(200).send(entry)
- else res.status(404).end()
+ else httpResponse.notFound(res, req.params.id)
})
// ############################################################################
@@ -24,20 +26,23 @@ 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(res, 'ids', 'an array')
const count = await db.entry.destroy({ where: { id: req.body.ids } })
- res.status(200).send({ count })
+ httpResponse.successBatch(res, 'deleted', ['ipxe entry', 'ipxe entries'], count)
} else {
let entry
- if (req.params.id === undefined) entry = await db.entry.create(req.body.data)
- else {
+ let action = 'updated'
+ if (req.params.id === undefined) {
+ entry = await db.entry.create(req.body.data)
+ action = 'created'
+ } else if (req.params.id > 0) {
entry = await db.entry.findOne({ where: { id: req.params.id } })
- if (entry) await entry.update(req.body.data)
- }
- if (entry) {
- res.status(200).send({ id: entry.id })
+ if (!entry) return httpResponse.notFound(res, req.params.id)
+ else await entry.update(req.body.data)
} else {
- res.status(404).end()
+ return httpResponse.invalidId(res)
}
+ httpResponse.success(res, action, 'ipxe entry', entry.id)
}
})
@@ -45,9 +50,10 @@ router.postAsync(['', '/:id'], async (req, res) => {
// ########################## DELETE requests ###############################
router.deleteAsync('/:id', async (req, res) => {
+ if (!(req.params.id > 0)) return httpResponse.invalidId(res)
const count = await db.entry.destroy({ where: { id: req.params.id } })
- if (count) res.status(200).end()
- else res.status(404).end()
+ if (count) httpResponse.success(res, 'deleted', ['ipxe entry', 'ipxe entries'], req.params.id)
+ else httpResponse.notFound(res, req.params.id)
})
// ############################################################################
diff --git a/server/lib/httpresponse.js b/server/lib/httpresponse.js
index 29399b2..4ef6ab1 100644
--- a/server/lib/httpresponse.js
+++ b/server/lib/httpresponse.js
@@ -1,7 +1,11 @@
const response = {}
response.success = (res, action, type, id, data = {}) => res.status(200).send({ message: `Successfully ${action} ${type} ${id}.`, id, ...data })
-response.successBatch = (res, action, type, count, data = {}) => res.status(200).send({ message: `Successfully ${action} ${count} ${type + (count === 1 ? '' : 's')}.`, count, ...data })
+response.successBatch = (res, action, type, count, data = {}) => {
+ if (Array.isArray(type) && type.length === 2) type = count === 1 ? type[0] : type[1]
+ else if (typeof type === 'string' && count !== 1) type += 's'
+ return res.status(200).send({ message: `Successfully ${action} ${count} ${type}.`, count, ...data })
+}
response.notFound = (res, id) => res.status(404).send({ error: 'NOT_FOUND', message: 'ID ' + id + ' does not exist.' })
response.invalidId = (res, zeroAllowed) => res.status(400).send({ error: 'INVALID_ID', message: 'ID has to be an integer' + (zeroAllowed ? '' : ' greater than 0') + '.' })