49 lines
1.1 KiB
JavaScript
49 lines
1.1 KiB
JavaScript
const http = require('http')
|
|
const process = require('process')
|
|
|
|
const { VM } = require('vm2')
|
|
|
|
const args = process.argv.slice(2)
|
|
const port = args[0] || 8000
|
|
const host = args[1] || 'localhost'
|
|
|
|
const stubFunc = (_i) => {}
|
|
|
|
const vm = new VM({
|
|
timeout: 2000,
|
|
allowAsync: false,
|
|
sandbox: {
|
|
atob: atob,
|
|
setTimeout: stubFunc,
|
|
setInterval: stubFunc,
|
|
document: {
|
|
getElementById: stubFunc,
|
|
prepend: stubFunc,
|
|
append: stubFunc,
|
|
appendChild: stubFunc,
|
|
doctype: {},
|
|
currentScript: {},
|
|
},
|
|
},
|
|
})
|
|
vm.run('var window = global')
|
|
|
|
const listener = (req, res) => {
|
|
|
|
if (req.method != 'POST')
|
|
res.writeHead(405) & res.end()
|
|
|
|
let body = ''
|
|
req.on('data', chunk => (body += chunk))
|
|
|
|
req.on('end', () => {
|
|
let resp
|
|
try { resp = JSON.stringify(vm.run(body)) }
|
|
catch (ex) { resp = ex.message }
|
|
res.writeHead(200)
|
|
res.end(resp)
|
|
})
|
|
}
|
|
|
|
const server = http.createServer(listener)
|
|
server.listen(port, host, () => console.log('OK'))
|