diff --git a/src/controllers/uploads.js b/src/controllers/uploads.js index 8dff27b47c..59253c5666 100644 --- a/src/controllers/uploads.js +++ b/src/controllers/uploads.js @@ -45,11 +45,26 @@ uploadsController.upload = function(req, res, filesIterator, next) { uploadsController.uploadPost = function(req, res, next) { uploadsController.upload(req, res, function(uploadedFile, next) { - if (uploadedFile.type.match(/image./)) { - uploadImage(req.uid, uploadedFile, next); - } else { - uploadFile(req.uid, uploadedFile, next); + var isImage = uploadedFile.type.match(/image./); + if (isImage && plugins.hasListeners('filter:uploadImage')) { + return plugins.fireHook('filter:uploadImage', {image: uploadedFile, uid: req.uid}, next); } + + async.waterfall([ + function(next) { + if (isImage) { + file.isFileTypeAllowed(uploadedFile.path, next); + } else { + next(); + } + }, + function (next) { + if (parseInt(meta.config.allowFileUploads, 10) !== 1) { + return next(new Error('[[error:uploads-are-disabled]]')); + } + uploadFile(req.uid, uploadedFile, next); + } + ], next); }, next); }; @@ -65,22 +80,27 @@ uploadsController.uploadThumb = function(req, res, next) { return next(err); } - if (uploadedFile.type.match(/image./)) { - var size = parseInt(meta.config.topicThumbSize, 10) || 120; - image.resizeImage({ - path: uploadedFile.path, - extension: path.extname(uploadedFile.name), - width: size, - height: size - }, function(err) { - if (err) { - return next(err); - } - uploadImage(req.uid, uploadedFile, next); - }); - } else { - next(new Error('[[error:invalid-file]]')); + if (!uploadedFile.type.match(/image./)) { + return next(new Error('[[error:invalid-file]]')); } + + var size = parseInt(meta.config.topicThumbSize, 10) || 120; + image.resizeImage({ + path: uploadedFile.path, + extension: path.extname(uploadedFile.name), + width: size, + height: size + }, function(err) { + if (err) { + return next(err); + } + + if (plugins.hasListeners('filter:uploadImage')) { + return plugins.fireHook('filter:uploadImage', {image: uploadedFile, uid: req.uid}, next); + } + + uploadFile(req.uid, uploadedFile, next); + }); }); }, next); }; @@ -102,32 +122,11 @@ uploadsController.uploadGroupCover = function(uid, uploadedFile, callback) { }); }; -function uploadImage(uid, image, callback) { - if (plugins.hasListeners('filter:uploadImage')) { - return plugins.fireHook('filter:uploadImage', {image: image, uid: uid}, callback); - } - - file.isFileTypeAllowed(image.path, function(err) { - if (err) { - return callback(err); - } - if (parseInt(meta.config.allowFileUploads, 10)) { - uploadFile(uid, image, callback); - } else { - callback(new Error('[[error:uploads-are-disabled]]')); - } - }); -} - function uploadFile(uid, uploadedFile, callback) { if (plugins.hasListeners('filter:uploadFile')) { return plugins.fireHook('filter:uploadFile', {file: uploadedFile, uid: uid}, callback); } - if (parseInt(meta.config.allowFileUploads, 10) !== 1) { - return callback(new Error('[[error:uploads-are-disabled]]')); - } - if (!uploadedFile) { return callback(new Error('[[error:invalid-file]]')); }