/* global __appdir */ var path = require('path') const fs = require('fs') var shell = require(path.join(__appdir, 'lib', 'shell')) var express = require('express') var router = express.Router() var noAuthRouter = express.Router() // GET requests. router.get('/:version/script', (req, res) => { res.setHeader('content-type', 'text/plain') res.sendFile(path.join(__appdir, 'ipxe', 'embedded_' + req.params.version + '.ipxe')) }) router.get('/:version/certificate', (req, res) => { res.setHeader('content-type', 'text/plain') res.sendFile(path.join(__appdir, 'bin', 'fullchain.pem')) }) router.get('/:version/general', (req, res) => { res.setHeader('content-type', 'text/plain') res.sendFile(path.join(__appdir, 'ipxe', 'general_' + req.params.version + '.h')) }) router.get('/:version/console', (req, res) => { res.setHeader('content-type', 'text/plain') res.sendFile(path.join(__appdir, 'ipxe', 'console_' + req.params.version + '.h')) }) router.get('/:version/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') fs.readFile(filepath, 'utf-8', function (err, content) { if (err) res.end() if (max !== -1 && content) { let c = content.split('\n') c = c.splice(-max) res.send(c.join('\n')) } else res.send(content) }) }) router.put('/:version/: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') } else if (req.params.filename === 'console' || req.params.filename === 'general') { filepath = path.join(__appdir, 'ipxe', req.params.filename + '_' + req.params.version + '.h') } else if (req.params.filename === 'certificate') { filepath = path.join(__appdir, 'bin', 'fullchain.pem') } else { res.status(500).send({ status: 'UNKNOWN_FILENAME', error: 'The provided filename is unknown' }) return } // Write File fs.writeFile(filepath, req.body.data, err => { if (err) res.status(500).send({ status: 'WRITE_FILE_ERROR', error: err }) else res.status(200).send({ status: 'SUCCESS' }) }) }) /* * @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('/: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('/: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('/:version/status', (req, res) => { res.send({ status: 'SUCCESS', data: shell.status(req.params.version) }) }) module.exports.router = router noAuthRouter.get('/load/script', (req, res) => { res.setHeader('content-type', 'text/plain') fs.readFile(path.join(__appdir, 'ipxe', 'default.ipxe'), 'utf-8', function (err, content) { if (err) res.end() res.send(content) }) }) noAuthRouter.get('/load/registration', (req, res) => { res.setHeader('content-type', 'text/plain') res.sendFile(path.join(__appdir, 'ipxe', 'registration.ipxe')) }) module.exports.noAuthRouter = noAuthRouter