From 243384edd87ec58828901a2d1424548d8b94b34c Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Mon, 20 Aug 2018 17:01:46 +0000 Subject: [tftp] Remove tftp Remove tftp server because an external tftp is used. Adding client from registrationscript is now working. --- server/api/registration.js | 117 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 28 deletions(-) (limited to 'server/api/registration.js') diff --git a/server/api/registration.js b/server/api/registration.js index c87431c..a5c1b6f 100644 --- a/server/api/registration.js +++ b/server/api/registration.js @@ -5,6 +5,7 @@ var express = require('express') var router = express.Router() var noAuthRouter = express.Router() var db = require(path.join(__appdir, 'lib', 'sequelize')) +var dhcp = require(path.join(__appdir, 'config', 'config')).dhcp // GET requests. @@ -16,10 +17,33 @@ router.get('/', (req, res) => { ip: 'dhcp.uni-freiburg.de', apiVersion: '1.7.1' }) - ipam.login('js1456', 'Test12345!').then(function (r) { + ipam.login(dhcp.user, dhcp.password).then(function (r) { if (r) { - ipam.getIpsFromSubnet('10.21.9.0/24').then(function (response) { - console.log(response) + // Get the network from the ip. + // ipam.getHost('10.21.9.78').then(function (response) { + ipam.getNetworkFromIp('10.21.9.78').then(function (response) { + // ipam.getIpsFromSubnet('10.21.9.0/24').then(function (response) { + // ipam.list('record:host').then(function (response) { + // ipam.getDomain().then(function (response) { + response = JSON.parse(response) + // ipam.getNext(response[0]._ref, 1).then(r => { + res.send(response) + // }) + // res.send(JSON.parse(response)) + }) + } + // res.status(200).send({ status: 'work in progress ...' }) + }) +}) + +router.get('/setdhcptest', (req, res) => { + var ipam = new Infoblox({ + ip: 'dhcp.uni-freiburg.de', + apiVersion: '1.7.1' + }) + ipam.login('js603', 'Iwjp!DFhk4').then(function (r) { + if (r) { + ipam.create('record:host?_return_fields%2B=na13me,ipv4addrs&_return_as_object=1', {'name': 'wapiTest.lp.privat', 'ipv4addrs': [{'ipv4addr': '10.21.9.141', 'mac': 'aa:bb:cc:11:22:21'}]}).then(function (response) { res.send(response) }) } @@ -38,13 +62,14 @@ module.exports.router = router * @return: */ noAuthRouter.post('/client', (req, res) => { - const mac = req.body.mac - const uuid = req.body.uuid - const ip = req.body.ip - const name = req.body.name - console.log(name.concat(' ', ip, ' ', mac, ' ', uuid)) + // const mac = req.body.mac + // const uuid = req.body.uuid + // const ip = req.body.ip + // const name = req.body.name + // console.log(name.concat(' ', ip, ' ', mac, ' ', uuid)) var script = '#!ipxe\r\n' + script.concat(`console --picture \${img} --x 800 --y 600 || shell\r\n`) db.group.findAll({ where: { '$parents.id$': null }, include: ['parents'] }).then(groups => { groups.forEach(g => { script = script.concat('echo', ' [', g.id, '] ', g.name, '\r\n') @@ -52,9 +77,7 @@ noAuthRouter.post('/client', (req, res) => { script = script.concat('read group\r\n') script = script.concat('params\r\n') - /*eslint-disable */ - script = script.concat('param id ${group}\r\n') - /* eslint-enable */ + script = script.concat(`param id \${group}\r\n`) script = script.concat('chain https://bas.stfu-kthx.net:8888/api/registration/group##params\r\n') res.status(200).send(script) }) @@ -62,25 +85,63 @@ noAuthRouter.post('/client', (req, res) => { noAuthRouter.post('/group', (req, res) => { const id = req.body.id + console.log(id) + if (id === '0') { + db.group.findAll({ where: { '$parents.id$': null }, include: ['parents'] }).then(groups => { + if (groups) { + res.send(buildIpxeMenu(id, 'Root', groups)) + } else { + res.status(404).end() + } + }) + } else { + db.group.findOne({ where: { id: id }, include: ['parents', 'subgroups', 'clients'] }).then(group => { + if (group) { + res.send(buildIpxeMenu(id, group.name, group.subgroups)) + } else { + res.status(404).end() + } + }) + } +}) - var script = '#!ipxe\r\n' - db.group.findOne({ where: { id: id }, include: ['parents', 'subgroups', 'clients'] }).then(group => { - if (group) { - group.subgroups.forEach(subgroup => { - script = script.concat('echo', ' [', subgroup.id, '] ', subgroup.name, '\r\n') - }) - - script = script.concat('read group\r\n') - script = script.concat('params\r\n') - /*eslint-disable */ - script = script.concat('param id ${group}\r\n') - /* eslint-enable */ - script = script.concat('chain https://bas.stfu-kthx.net:8888/api/registration/group##params\r\n') - res.send(script) - } else { - res.status(404).end() - } +noAuthRouter.post('/add', (req, res) => { + const mac = req.body.mac + const uuid = req.body.uuid + const ip = req.body.ip + const name = req.body.name + const parentId = req.body.id + db.client.create({ name: name, ip: ip, mac: mac, uuid: uuid }).then(client => { + client.addGroup(parentId) + res.send('#ipxe\r\nshell') }) + console.log(name.concat(' ', ip, ' ', mac, ' ', uuid)) }) module.exports.noAuthRouter = noAuthRouter + +function buildIpxeMenu (id, name, groups) { + var script = '#!ipxe\r\n' + script.concat(`console --picture \${img} --x 800 --y 600 || shell\r\n`) + var menuscript = '' + script = script.concat(':start\r\n') + script = script.concat('menu Choose the group you want the client to be saved in\r\n') + var counter = '1' + groups.forEach(group => { + // script = script.concat('echo', ' [', subgroup.id, '] ', subgroup.name, '\r\n') + script = script.concat('item --key ', counter, ' ', counter, ' [', group.id, '] ', group.name, '\r\n') + menuscript = menuscript.concat(':', counter, '\r\n', 'params\r\nparam id ', group.id, '\r\nchain https://bas.stfu-kthx.net:8888/api/registration/group##params\r\n\r\n') + counter++ + }) + script = script.concat('item select Add client to ', name, '\r\n') + menuscript = menuscript.concat(`:select\r\necho Enter client name\r\nread clientname\r\nparams\r\nparam name \${clientname}\r\n`) + menuscript = menuscript.concat('param id ', id, `\r\nparam mac \${net0/mac}\r\nparam uuid \${uuid}\r\nparam ip \${net0/ip}\r\n`) + menuscript = menuscript.concat('chain https://bas.stfu-kthx.net:8888/api/registration/add##params\r\n\r\n') + if (id !== '0') { + script = script.concat('item reset Go to start\r\n') + menuscript = menuscript.concat(':reset\r\nparams\r\nparam id ', 0, '\r\nchain --replace https://bas.stfu-kthx.net:8888/api/registration/group##params\r\n\r\n') + } + script = script.concat(`choose target && goto \${target}\r\n\r\n`) + script = script.concat(menuscript) + return script +} -- cgit v1.2.3-55-g7522