|
| 1 | + |
| 2 | +/* Application server |
| 3 | + */ |
| 4 | + |
| 5 | +const express = require('express') |
| 6 | +const fileUpload = require('express-fileupload') |
| 7 | + |
| 8 | +const fileSize = process.env.FILESIZE || Infinity |
| 9 | + |
| 10 | +const files = 1 |
| 11 | +const abortOnLimit = true |
| 12 | +const safeFileNames = true |
| 13 | +const limits = { fileSize, files } |
| 14 | +const options = { safeFileNames, limits, abortOnLimit } |
| 15 | + |
| 16 | +function handleUpload(req, res, next) { |
| 17 | + const notProvided = new Error('File not provided') |
| 18 | + const invalidKey = new Error('Invalid key provided') |
| 19 | + if (!req.files || !req.files.data) throw notProvided |
| 20 | + if (!req.query.key || !process.env['KEY_' + req.query.key]) throw invalidKey |
| 21 | + req.files.data.mv(process.env['KEY_' + req.query.key], next) |
| 22 | +} |
| 23 | + |
| 24 | +function handleSuccess(req, res, next) { |
| 25 | + console.log(`[${req.ip}] [201] Upload successful for ${req.query.key}`) |
| 26 | + res.status(201).send('Upload successful') |
| 27 | +} |
| 28 | + |
| 29 | +function handleInvalidRequests(req, res) { |
| 30 | + throw new Error('That request is not supported') |
| 31 | +} |
| 32 | + |
| 33 | +function handleError(err, req, res, next) { |
| 34 | + const code = |
| 35 | + err.message == 'File not provided' || |
| 36 | + err.message == 'Invalid key provided' || |
| 37 | + err.message == 'That request is not supported' ? 400 : 500 |
| 38 | + const response = code == 400 ? err.message : 'Could not process upload' |
| 39 | + console.log(`[${req.ip}] [${code}] Upload failed with: ${err.message}`) |
| 40 | + res.status(code).send(response) |
| 41 | +} |
| 42 | + |
| 43 | +const app = express() |
| 44 | +app.use(fileUpload(options)) |
| 45 | +app.post('/upload', handleUpload) |
| 46 | +app.post('/upload', handleSuccess) |
| 47 | +app.all('*', handleInvalidRequests) |
| 48 | +app.use(handleError) |
| 49 | + |
| 50 | +module.exports = app |
0 commit comments