summaryrefslogtreecommitdiffstats
path: root/server/api/ipxe.js
blob: 6367246eaa30ddefa0e2ba13e896cc902092bc02 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/* 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) => {
  res.setHeader('content-type', 'text/plain')
  const filepath = path.join(__appdir, 'ipxe', 'log_' + req.params.version + '.txt')
  res.sendFile(filepath, err => {
    if (err) {
      res.end()
    }
  })
})

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