summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJannik Schönartz2019-03-06 03:56:58 +0100
committerJannik Schönartz2019-03-06 03:56:58 +0100
commit7aae6acdc3dacb4e80d61421a2956e20fa8f94ef (patch)
treefa2293eb43bca093d7bd320956615752f1f6c39e
parent[server] Fix ipxe sendlog. Fix idoit missing try catch. (diff)
downloadbas-7aae6acdc3dacb4e80d61421a2956e20fa8f94ef.tar.gz
bas-7aae6acdc3dacb4e80d61421a2956e20fa8f94ef.tar.xz
bas-7aae6acdc3dacb4e80d61421a2956e20fa8f94ef.zip
[server/ipranges] Store ipranges as integers in the db. Add converting ip -> int & int -> ip
-rw-r--r--server/api/groups.js13
-rw-r--r--server/migrations/20190223034423-create-iprange.js4
-rw-r--r--server/models/iprange.js4
3 files changed, 16 insertions, 5 deletions
diff --git a/server/api/groups.js b/server/api/groups.js
index 325169d..6dbddc7 100644
--- a/server/api/groups.js
+++ b/server/api/groups.js
@@ -2,6 +2,7 @@
var path = require('path')
var db = require(path.join(__appdir, 'lib', 'sequelize'))
var groupUtil = require(path.join(__appdir, 'lib', 'grouputil'))
+const ip = require(path.join(__appdir, 'lib', 'ip'))
var express = require('express')
const { decorateApp } = require('@awaitjs/express')
var router = decorateApp(express.Router())
@@ -17,8 +18,13 @@ 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', 'ipranges', 'subgroups', 'clients'] })
+ let group = await db.group.findOne({ where: { id: req.params.id }, include: ['parents', 'ipranges', 'subgroups', 'clients'] })
if (group) {
+ // Convert ipranges in readable strings.
+ group.ipranges.forEach(iprange => {
+ iprange.startIp = ip.toString(iprange.startIp)
+ iprange.endIp = ip.toString(iprange.endIp)
+ })
if (all) res.status(200).send({ ...group.get({ plain: true }), ...await groupUtil.getAllChildren([group]) })
else res.status(200).send(group)
} else {
@@ -63,6 +69,11 @@ router.postAsync(['', '/:id'], async (req, res) => {
// Update existing ipranges and create the new ones
req.body.ipranges.forEach(iprange => {
if (!iprange.startIp || !iprange.endIp) return
+
+ // Convert valid ip addresses to integer values.
+ if (!ip.isIpv4(iprange.startIp) || !ip.isIpv4(iprange.endIp)) return
+ iprange.startIp = ip.toInt(iprange.startIp)
+ iprange.endIp = ip.toInt(iprange.endIp)
if (iprange.id) {
if (iprangeIdMap[iprange.id]) {
promises.push(iprangeIdMap[iprange.id].update(iprange))
diff --git a/server/migrations/20190223034423-create-iprange.js b/server/migrations/20190223034423-create-iprange.js
index 75d6d6f..d38a4ac 100644
--- a/server/migrations/20190223034423-create-iprange.js
+++ b/server/migrations/20190223034423-create-iprange.js
@@ -9,10 +9,10 @@ module.exports = {
type: Sequelize.INTEGER
},
startIp: {
- type: Sequelize.STRING
+ type: Sequelize.BIGINT
},
endIp: {
- type: Sequelize.STRING(2048)
+ type: Sequelize.BIGINT
},
groupId: {
allowNull: false,
diff --git a/server/models/iprange.js b/server/models/iprange.js
index 0792a15..decb63a 100644
--- a/server/models/iprange.js
+++ b/server/models/iprange.js
@@ -7,8 +7,8 @@ module.exports = (sequelize, DataTypes) => {
primaryKey: true,
type: DataTypes.INTEGER
},
- startIp: DataTypes.STRING,
- endIp: DataTypes.STRING
+ startIp: DataTypes.BIGINT,
+ endIp: DataTypes.BIGINT
}, {
timestamps: false
})