From 175065246ec68835111967c4174de526a6356406 Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Sun, 14 Apr 2019 01:16:47 +0000 Subject: [ipranges] new webapp module and ip for ipranges --- server/api/ipranges.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 server/api/ipranges.js (limited to 'server/api') 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 -- cgit v1.2.3-55-g7522