Delete uploaded sample if something goes wrong, add sample size limit

This commit is contained in:
Kevin Thomas
2021-11-11 20:26:18 -08:00
parent af5049c98e
commit f4ec82b2ff
2 changed files with 32 additions and 15 deletions

View File

@@ -3,6 +3,7 @@
"listeningPort": 1432, "listeningPort": 1432,
"sessionFileStorePath": "sessions", "sessionFileStorePath": "sessions",
"sampleUploadPath": "samples", "sampleUploadPath": "samples",
"maxSampleSize": 10737418240, // In bytes, 10GB by default
"sessionSecret": "cats", "sessionSecret": "cats",
"logFile": "log/noisedash.log", "logFile": "log/noisedash.log",
"tls": false, "tls": false,

View File

@@ -1,6 +1,8 @@
const express = require('express') const express = require('express')
const config = require('config') const config = require('config')
const multer = require('multer') const multer = require('multer')
const fs = require('fs')
const path = require('path')
const storage = multer.diskStorage({ const storage = multer.diskStorage({
destination: config.get('Server.sampleUploadPath'), destination: config.get('Server.sampleUploadPath'),
filename: (req, file, cb) => { filename: (req, file, cb) => {
@@ -13,7 +15,10 @@ const storage = multer.diskStorage({
} }
} }
}) })
const upload = multer({ storage: storage }) const upload = multer({
storage: storage,
limits: { fileSize: config.get('Server.maxSampleSize') }
})
const db = require('../db') const db = require('../db')
const router = express.Router() const router = express.Router()
const logger = require('../logger') const logger = require('../logger')
@@ -27,33 +32,44 @@ router.post('/samples', upload.single('sample'), (req, res, next) => {
db.get('SELECT can_upload FROM users WHERE id = ?', [req.user.id], (err, row) => { db.get('SELECT can_upload FROM users WHERE id = ?', [req.user.id], (err, row) => {
if (err) { if (err) {
logger.error(err) logger.error(err)
deleteSample(req.user.id + '_' + req.body.name)
return res.sendStatus(500) return res.sendStatus(500)
} }
if (row.can_upload === 0) { if (row.can_upload === 0) {
deleteSample(req.user.id + '_' + req.body.name)
return res.sendStatus(401) return res.sendStatus(401)
} }
})
db.run('INSERT INTO samples (name, user) VALUES (?, ?)', [ db.run('INSERT INTO samples (name, user) VALUES (?, ?)', [
req.body.name, req.body.name,
req.user.id req.user.id
], ],
(err) => { (err) => {
if (err) { if (err) {
logger.error(err) logger.error(err)
if (err.code === 'SQLITE_CONSTRAINT') { deleteSample(req.user.id + '_' + req.body.name)
return res.sendStatus(409) if (err.code === 'SQLITE_CONSTRAINT') {
return res.sendStatus(409)
} else {
return res.sendStatus(500)
}
} else { } else {
return res.sendStatus(500) return res.sendStatus(200)
} }
} else { })
return res.sendStatus(200)
}
}) })
}) })
}) })
function deleteSample (fileName) {
fs.unlink(path.join(__dirname, '../../', config.get('Server.sampleUploadPath'), fileName), (err) => {
if (err) {
logger.error(err)
}
})
}
router.get('/samples', (req, res) => { router.get('/samples', (req, res) => {
if (!req.user) { if (!req.user) {
return res.sendStatus(401) return res.sendStatus(401)