server.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. const http = require('http')
  2. const qs = require('querystring')
  3. const e = require('he').encode
  4. /**
  5. * A very haxxor server that outputs some of the data it receives in a POST form parameter.
  6. */
  7. const server = http.createServer(onrequest)
  8. server.listen(9967)
  9. function onrequest (req, res) {
  10. if (req.url !== '/test') {
  11. res.writeHead(404, { 'content-type': 'text/html' })
  12. res.end('404')
  13. return
  14. }
  15. let body = ''
  16. req.on('data', (chunk) => { body += chunk })
  17. req.on('end', () => {
  18. onbody(body)
  19. })
  20. function onbody (body) {
  21. const fields = qs.parse(body)
  22. const assemblies = JSON.parse(fields.transloadit)
  23. res.setHeader('content-type', 'text/html')
  24. res.write(Header())
  25. res.write(FormFields(fields))
  26. assemblies.forEach((assembly) => {
  27. res.write(AssemblyResult(assembly))
  28. })
  29. res.end(Footer())
  30. }
  31. }
  32. function Header () {
  33. return `
  34. <!DOCTYPE html>
  35. <html>
  36. <head>
  37. <style>
  38. body { background: #f1f1f1; }
  39. main {
  40. padding: 20px;
  41. font: 12pt sans-serif;
  42. background: white;
  43. width: 800px;
  44. margin: auto;
  45. }
  46. </style>
  47. </head>
  48. <body>
  49. <main>
  50. `
  51. }
  52. function Footer () {
  53. return `
  54. </main>
  55. </body>
  56. </html>
  57. `
  58. }
  59. function FormFields (fields) {
  60. return `
  61. <h1>Form Fields</h1>
  62. <dl>
  63. ${Object.entries(fields).map(Field).join('\n')}
  64. </dl>
  65. `
  66. function Field ([name, value]) {
  67. if (name === 'transloadit') return ''
  68. return `
  69. <dt>${e(name)}</dt>
  70. <dd>${e(value)}</dd>
  71. `
  72. }
  73. }
  74. function AssemblyResult (assembly) {
  75. return `
  76. <h1>${e(assembly.assembly_id)} (${e(assembly.ok)})</h1>
  77. ${UploadsList(assembly.uploads)}
  78. ${ResultsList(assembly.results)}
  79. `
  80. }
  81. function UploadsList (uploads) {
  82. return `
  83. <ul>
  84. ${uploads.map(Upload).join('\n')}
  85. </ul>
  86. `
  87. function Upload (upload) {
  88. return `<li>${e(upload.name)}</li>`
  89. }
  90. }
  91. function ResultsList (results) {
  92. return Object.keys(results)
  93. .map(ResultsSection)
  94. .join('\n')
  95. function ResultsSection (stepName) {
  96. return `
  97. <h2>${e(stepName)}</h2>
  98. <ul>
  99. ${results[stepName].map(Result).join('\n')}
  100. </ul>
  101. `
  102. }
  103. function Result (result) {
  104. return `<li>${e(result.name)} <a href="${result.ssl_url}" target="_blank">View</a></li>`
  105. }
  106. }