diff --git a/MagicNumbers.json b/MagicNumbers.json index 7a40859..bdecbfb 100644 --- a/MagicNumbers.json +++ b/MagicNumbers.json @@ -5,5 +5,7 @@ "CODE_BAD_REQUEST": 400, "CODE_UNAUTHORIZED": 401, "CODE_NOT_FOUND": 404, + "CODE_PAYLOAD_TOO_LARGE": 413, + "CODE_INTERNAL_SERVER_ERROR": 500, "KILOBYTES": 1024 } \ No newline at end of file diff --git a/ass.js b/ass.js index a576ac6..04025a9 100755 --- a/ass.js +++ b/ass.js @@ -22,7 +22,7 @@ const { WebhookClient, MessageEmbed } = require('discord.js'); const { doUpload, deleteS3, processUploaded } = require('./storage'); const { path, saveData, log, verify, getTrueHttp, getTrueDomain, generateToken, generateId, formatBytes, formatTimestamp, arrayEquals, getS3url, getDirectUrl, getSafeExt, getResourceColor, replaceholder } = require('./utils'); -const { CODE_NO_CONTENT, CODE_BAD_REQUEST, CODE_UNAUTHORIZED, CODE_NOT_FOUND } = require('./MagicNumbers.json'); +const { CODE_NO_CONTENT, CODE_BAD_REQUEST, CODE_UNAUTHORIZED, CODE_NOT_FOUND, CODE_PAYLOAD_TOO_LARGE, CODE_INTERNAL_SERVER_ERROR } = require('./MagicNumbers.json'); //#endregion //#region Variables, module setup @@ -113,7 +113,7 @@ function startup() { // Upload file app.post('/', doUpload, processUploaded, ({ next }) => next()); - app.use('/', (err, _req, res, next) => err.code && err.code === 'LIMIT_FILE_SIZE' ? res.status(413).send(`Max upload size: ${maxUploadSize}MB`) : next(err)); + app.use('/', (err, _req, res, next) => err.code && err.code === 'LIMIT_FILE_SIZE' ? res.status(CODE_PAYLOAD_TOO_LARGE).send(`Max upload size: ${maxUploadSize}MB`) : next(err)); // Process uploaded file app.post('/', (req, res) => { @@ -302,9 +302,9 @@ function startup() { .catch(console.error); }); - app.use((err, _req, res, _next) => { + app.use(([err, , res,]) => { console.error(err); - res.sendStatus(500); + res.sendStatus(CODE_INTERNAL_SERVER_ERROR); }); // Host the server diff --git a/storage.js b/storage.js index 2ec51f5..0d5032d 100644 --- a/storage.js +++ b/storage.js @@ -10,6 +10,8 @@ const Hash = require('./hash'); const { getSafeExt, getDatedDirname, sanitize, generateId } = require('./utils'); const { s3enabled, s3endpoint, s3bucket, s3accessKey, s3secretKey, saveAsOriginal, maxUploadSize } = require('./config.json'); +const ID_GEN_LENGTH = 32; + const s3 = new aws.S3({ endpoint: new aws.Endpoint(s3endpoint), credentials: new aws.Credentials({ accessKeyId: s3accessKey, secretAccessKey: s3secretKey }) @@ -31,8 +33,8 @@ function processUploaded(req, _, next) { // Fixes req.file.mimetype = req.file.detectedMimeType; req.file.originalname = sanitize(req.file.originalName); - req.file.randomId = generateId('random', 32, null, null); - req.file.deleteId = generateId('random', 32, null, null); + req.file.randomId = generateId('random', ID_GEN_LENGTH, null, null); + req.file.deleteId = generateId('random', ID_GEN_LENGTH, null, null); // Remove unwanted fields delete req.file.fieldName; @@ -44,8 +46,9 @@ function processUploaded(req, _, next) { // Operations saveFile(req) - .then(() => req.file.path = req.file.path.concat('.temp')) + .then(() => req.file.path = req.file.path.concat('.temp')) // skipcq: JS-0086 .then(() => Promise.all([Thumbnail(req.file), Vibrant(req.file), Hash(req.file)])) + // skipcq: JS-0086 .then(([thumbnail, vibrant, sha1]) => ( req.file.thumbnail = thumbnail, // skipcq: JS-0090 req.file.vibrant = vibrant, // skipcq: JS-0090 @@ -53,6 +56,7 @@ function processUploaded(req, _, next) { )) .then(() => + // skipcq: JS-0229 new Promise((resolve, reject) => s3enabled // Upload to Amazon S3 @@ -85,10 +89,6 @@ function deleteS3(file) { .catch(reject)); } -function bucketSize() { - return new Promise((resolve, reject) => (s3enabled ? listAllKeys(resolve, reject) : resolve(0))); -} - function listAllKeys(resolve, reject, token) { let allKeys = []; s3.listObjectsV2({ Bucket: s3bucket, ContinuationToken: token }).promise() @@ -96,6 +96,10 @@ function listAllKeys(resolve, reject, token) { .catch(reject); } +function bucketSize() { + return new Promise((resolve, reject) => (s3enabled ? listAllKeys(resolve, reject) : resolve(0))); +} + module.exports = { doUpload: multer({ limits: { fileSize: `${maxUploadSize}MB` } }).single('file'), processUploaded, diff --git a/vibrant.js b/vibrant.js index 8290c16..3165b82 100644 --- a/vibrant.js +++ b/vibrant.js @@ -25,4 +25,4 @@ function getVibrant(file, resolve, reject) { * @param {*} file The file to get a colour from * @returns The Vibrant colour as a Hex value (or random Hex value for videos) */ -module.exports = (file) => new Promise((resolve, reject) => file.mimetype.includes('video') ? resolve(randomHexColour()) : getVibrant(file, resolve, reject)); +module.exports = (file) => new Promise((resolve, reject) => file.mimetype.includes('video') ? resolve(randomHexColour()) : getVibrant(file, resolve, reject)); // skipcq: JS-0229