summaryrefslogtreecommitdiffstats
path: root/server/api/ipranges.js
diff options
context:
space:
mode:
authorUdo Walter2019-04-14 03:16:47 +0200
committerUdo Walter2019-04-14 03:16:47 +0200
commit175065246ec68835111967c4174de526a6356406 (patch)
tree8f89abc22120ca4fc425f78a40b95a6f6e140563 /server/api/ipranges.js
parent[datatable] exportButton -> copyButton (diff)
downloadbas-175065246ec68835111967c4174de526a6356406.tar.gz
bas-175065246ec68835111967c4174de526a6356406.tar.xz
bas-175065246ec68835111967c4174de526a6356406.zip
[ipranges] new webapp module and ip for ipranges
Diffstat (limited to 'server/api/ipranges.js')
-rw-r--r--server/api/ipranges.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/server/api/ipranges.js b/server/api/ipranges.js
new file mode 100644
index 0000000..16ea3e5
--- /dev/null
+++ b/server/api/ipranges.js
@@ -0,0 +1,74 @@
+/* global __appdir */
+var path = require('path')
+var db = require(path.join(__appdir, 'lib', 'sequelize'))
+var wol = require('node-wol')
+var express = require('express')
+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'))
+
+// ############################################################################
+// ########################### GET requests #################################
+
+router.getAsync('', async (req, res) => {
+ const ipranges = await db.iprange.findAll({ include: ['group'] })
+ ipranges.forEach(iprange => {
+ iprange.startIp = iphelper.toIPv4(iprange.startIp)
+ iprange.endIp = iphelper.toIPv4(iprange.endIp)
+ })
+ res.send(ipranges)
+})
+
+router.getAsync('/:id', async (req, res) => {
+ if (!(req.params.id > 0)) return HttpResponse.invalidId().send(res)
+ const iprange = await db.iprange.findOne({ where: { id: req.params.id }, include: ['group'] })
+ if (iprange) {
+ iprange.startIp = iphelper.toIPv4(iprange.startIp)
+ iprange.endIp = iphelper.toIPv4(iprange.endIp)
+ res.status(200).send(iprange)
+ }
+ else HttpResponse.notFound(req.params.id).send(res)
+})
+
+// ############################################################################
+// ########################## POST requests #################################
+
+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)
+ }
+ let iprange
+ let action = 'updated'
+ req.body.startIp = iphelper.toDecimal(req.body.startIp)
+ req.body.endIp = iphelper.toDecimal(req.body.endIp)
+ if (req.params.id === undefined) {
+ iprange = await db.iprange.create(req.body)
+ 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 {
+ return HttpResponse.invalidId().send(res)
+ }
+ HttpResponse.success(action, 'iprange', iprange.id).send(res)
+})
+
+// ############################################################################
+// ########################## DELETE requests ###############################
+
+router.delete('/:id', async (req, res) => {
+ if (!(req.params.id > 0)) return HttpResponse.invalidId().send(res)
+ const count = await db.iprange.destroy({ where: { id: req.params.id } })
+ if (count) HttpResponse.success('deleted', 'iprange', req.params.id).send(res)
+ else HttpResponse.notFound(req.params.id).send(res)
+})
+
+
+// ############################################################################
+// ############################################################################
+
+module.exports.router = router