const http = require('http')
const qs = require('querystring')
const e = require('he').encode
/**
* A very haxxor server that outputs some of the data it receives in a POST form parameter.
*/
const server = http.createServer(onrequest)
server.listen(9967)
function onrequest (req, res) {
if (req.url !== '/test') {
res.writeHead(404, {'content-type': 'text/html'})
res.end('404')
return
}
let body = ''
req.on('data', (chunk) => { body += chunk })
req.on('end', () => {
onbody(body)
})
function onbody (body) {
const fields = qs.parse(body)
const assemblies = JSON.parse(fields.transloadit)
res.setHeader('content-type', 'text/html')
res.write(Header())
res.write(FormFields(fields))
assemblies.forEach((assembly) => {
res.write(AssemblyResult(assembly))
})
res.end(Footer())
}
}
function Header () {
return `
`
}
function Footer () {
return `
`
}
function FormFields (fields) {
return `
Form Fields
${Object.entries(fields).map(Field).join('\n')}
`
function Field ([name, value]) {
if (name === 'transloadit') return ''
return `
${e(name)}
${e(value)}
`
}
}
function AssemblyResult (assembly) {
return `
${e(assembly.assembly_id)} (${e(assembly.ok)})
${UploadsList(assembly.uploads)}
${ResultsList(assembly.results)}
`
}
function UploadsList (uploads) {
return `
${uploads.map(Upload).join('\n')}
`
function Upload (upload) {
return `${e(upload.name)}`
}
}
function ResultsList (results) {
return Object.keys(results)
.map(ResultsSection)
.join('\n')
function ResultsSection (stepName) {
return `
${e(stepName)}
${results[stepName].map(Result).join('\n')}
`
}
function Result (result) {
return `${e(result.name)} View`
}
}