From c6141d8aba461e2ff7851087c5801fa2cd156265 Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Sun, 5 May 2019 20:58:34 +0000 Subject: [ipxe builder] Merge efi and bios ipxe builder to one tab & add parameters ui [server] Remove all req, res from the shell.js library Add ipxe config for the build parameters & parameter list Add api getter/setter methods for the ipxe config [webapp] Add ui for repository, branch and build targets Output: All of the scroll to bottom is now clickable --- server/api/ipxe.js | 83 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 31 deletions(-) (limited to 'server/api') diff --git a/server/api/ipxe.js b/server/api/ipxe.js index 2e89e32..7b5ad85 100644 --- a/server/api/ipxe.js +++ b/server/api/ipxe.js @@ -7,30 +7,30 @@ var router = express.Router() var noAuthRouter = express.Router() // GET requests. -router.get('/:version/script', (req, res) => { +router.get('/script', (req, res) => { res.setHeader('content-type', 'text/plain') - res.sendFile(path.join(__appdir, 'ipxe', 'embedded_' + req.params.version + '.ipxe')) + res.sendFile(path.join(__appdir, 'ipxe', 'embedded.ipxe')) }) -router.get('/:version/certificate', (req, res) => { +router.get('/certificate', (req, res) => { res.setHeader('content-type', 'text/plain') res.sendFile(path.join(__appdir, 'bin', 'fullchain.pem')) }) -router.get('/:version/general', (req, res) => { +router.get('/general', (req, res) => { res.setHeader('content-type', 'text/plain') - res.sendFile(path.join(__appdir, 'ipxe', 'general_' + req.params.version + '.h')) + res.sendFile(path.join(__appdir, 'ipxe', 'general.h')) }) -router.get('/:version/console', (req, res) => { +router.get('/console', (req, res) => { res.setHeader('content-type', 'text/plain') - res.sendFile(path.join(__appdir, 'ipxe', 'console_' + req.params.version + '.h')) + res.sendFile(path.join(__appdir, 'ipxe', 'console.h')) }) -router.get('/:version/log', async (req, res) => { +router.get('/log', async (req, res) => { const max = req.query.max ? req.query.max : -1 res.setHeader('content-type', 'text/plain') - const filepath = path.join(__appdir, 'ipxe', 'log_' + req.params.version + '.txt') + const filepath = path.join(__appdir, 'ipxe', 'ipxelog.txt') fs.readFile(filepath, 'utf-8', function (err, content) { if (err) res.end() @@ -42,13 +42,41 @@ router.get('/:version/log', async (req, res) => { }) }) -router.put('/:version/:filename', (req, res) => { +router.get('/config', (req, res) => { + delete require.cache[require.resolve(path.join(__appdir, 'config', 'ipxe'))] + var config = require(path.join(__appdir, 'config', 'ipxe')) + res.send(config) +}) + +router.post('/config', (req, res) => { + let buildTargets = req.body.buildTargets + const targetList = req.body.targetList + const branch = req.body.branch + const repository = req.body.repository + var config = require(path.join(__appdir, 'config', 'ipxe')) + + if (repository) config.repository = repository + if (branch) config.branch = branch + if (targetList && config.targets.custom) config.targets.list = targetList + + if (buildTargets) { + if (!config.targets.custom) buildTargets = buildTargets.filter(target => config.targets.list.indexOf(target) >= 0) + config.targets.build = buildTargets + } + + fs.writeFile(path.join(__appdir, 'config', 'ipxe.json'), JSON.stringify(config, null, 4), {}, (err) => { + if (err) res.status(500).end() + else res.send() + }) +}) + +router.put('/:filename', (req, res) => { var filepath = null // Set the file path if (req.params.filename === 'script') { - filepath = path.join(__appdir, 'ipxe', 'embedded_' + req.params.version + '.ipxe') + filepath = path.join(__appdir, 'ipxe', 'embedded.ipxe') } else if (req.params.filename === 'console' || req.params.filename === 'general') { - filepath = path.join(__appdir, 'ipxe', req.params.filename + '_' + req.params.version + '.h') + filepath = path.join(__appdir, 'ipxe', req.params.filename + '.h') } else if (req.params.filename === 'certificate') { filepath = path.join(__appdir, 'bin', 'fullchain.pem') } else { @@ -66,31 +94,24 @@ router.put('/:version/:filename', (req, res) => { /* * @return: Rebuild the ipxe. */ -router.get('/:version/build', async (req, res) => { - if (req.params.version === 'efi' || req.params.version === 'bios') { - shell.buildIpxe(req, res) - } else { - res.status(400).send({ status: 'error', msg: 'Unknown ipxe version (' + req.params.version + ')' }) - } +router.get('/build', async (req, res) => { + delete require.cache[require.resolve(path.join(__appdir, 'config', 'ipxe'))] + const config = require(path.join(__appdir, 'config', 'ipxe')) + const build = await shell.buildIpxe(config.targets.build.join(' '), config.repository, config.branch) + res.send(build) }) -router.get('/:version/cancel', async (req, res) => { - if (req.params.version === 'efi' || req.params.version === 'bios') { - shell.cancelBuilding(req, res) - } else { - res.status(400).send({ status: 'error', msg: 'Unknown ipxe version (' + req.params.version + ')' }) - } +router.get('/cancel', async (req, res) => { + const result = await shell.cancelBuilding(req, res) + res.send(result) }) -router.get('/:version/clean', (req, res) => { - if (req.params.version === 'efi' || req.params.version === 'bios') { - shell.clean(req, res) - } else { - res.status(400).send({ status: 'error', msg: 'Unknown ipxe version (' + req.params.version + ')' }) - } +router.get('/clean', async (req, res) => { + const result = await shell.clean() + res.send(result) }) -router.get('/:version/status', (req, res) => { +router.get('/status', (req, res) => { res.send({ status: 'SUCCESS', data: shell.status(req.params.version) }) }) -- cgit v1.2.3-55-g7522