_
File size: 1,219 Bytes
75a22b0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
const node = {}
const modules = 'child_process|fs|os|process|timers|util'
for (let m of modules.split`|`) node[m] = require(`node:${m}`)

const formatBytes = require('bytes'),
  express = require('express'),
  morgan = require('morgan'),
  serveIndex = require('serve-index')

const limitSize = '69mb',
  tmpDir = node.os.tmpdir(),
  { env } = node.process,
  PORT = env.SERVER_PORT || env.PORT || 7860

const logger = (...args) => console.log(
  new Date().toLocaleTimeString(
    'fr', { timeZone: 'Asia/Jakarta' }
  ),
  ...args
)

const execPromise = node.util.promisify(
  node.child_process.exec
)

express()
  .enable('trust proxy')
  .set('json spaces', 2)
  .use(express.json({ limit: limitSize }))
  .use(express.urlencoded({ extended: true, limit: limitSize }))
  .use(morgan('dev'))
  .use(
    tmpDir,
    express.static(tmpDir),
    serveIndex(tmpDir, { hidden: true, icons: true })
  )
  .all('/', (_, res) => res.json({ msg: 'goodbye world.' }))
  .post('/eval', async (req, res) => {
    let code = req.body.code, o
    code = `(async function MengEval() { ${code} })()`
    try { o = await eval(code) }
    catch (e) { o = e }
    finally { res.send(node.util.format(o)) }
  })
  .listen(PORT, logger)