Guest User

Untitled

a guest
Jul 21st, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. const fs = require('fs');
  2. const cmd = require('node-cmd');
  3.  
  4. const dockerMap = (epoch, key) => {
  5.  
  6. const dockerCLI = `docker run \
  7. -v ${__dirname}/${epoch}:/scripts \
  8. -w /scripts \
  9. -t`
  10.  
  11. const pipeOutput = `> ${__dirname}/${epoch}/output.txt`
  12.  
  13. const map = {
  14. 'bash': {
  15. 'container': 'ubuntu',
  16. 'script': 'bash script.sh'
  17. }
  18. }
  19. return `${dockerCLI} ${map[key]['container']} ${map[key]['script']} ${pipeOutput}`
  20. }
  21.  
  22. const mockFile = () => {
  23. return `#!/usr/bin/env bash \n ls -al \n echo "start" \n sleep 5 \n echo "Hello, World!"`
  24. }
  25.  
  26. const runCode = (interpreter = 'bash', file=mockFile()) => {
  27. return new Promise((resolve, reject) => {
  28. const epoch = new Date().getTime()
  29. const dir = `${__dirname}/${epoch}`
  30.  
  31. fs.mkdirSync(dir)
  32. fs.writeFile(dir + '/script.sh', file, (err) => {
  33. cmd.get(`
  34. cd ${epoch}
  35. ${dockerMap(epoch, interpreter)}
  36. `, (err, data) => {
  37. fs.readFile(dir + '/output.txt', 'utf8', (err, data) => {
  38. cmd.run(`rm -r ${dir}`)
  39. if (err) reject(err)
  40. resolve(data)
  41. })
  42. })
  43. })
  44. })
  45. }
  46.  
  47. module.exports = {
  48. runCode
  49. }
Add Comment
Please, Sign In to add comment