diff --git a/modules/core/server/controllers/errors.server.controller.js b/modules/core/server/controllers/errors.server.controller.js index 003d4aab5b..c584819dd7 100644 --- a/modules/core/server/controllers/errors.server.controller.js +++ b/modules/core/server/controllers/errors.server.controller.js @@ -1,5 +1,11 @@ 'use strict'; +/** + * Module dependencies + */ +var path = require('path'), + config = require(path.resolve('./config/config')); + /** * Get unique error field name */ @@ -39,9 +45,17 @@ exports.getErrorMessage = function (err) { case 11001: message = getUniqueErrorMessage(err); break; + case 'LIMIT_FILE_SIZE': + message = 'Image too big. Please maximum ' + (config.uploads.profileUpload.limits.fileSize / (1024 * 1024)).toFixed(2) + ' Mb files.'; + break; + case 'LIMIT_UNEXPECTED_FILE': + message = 'Missing `newProfilePicture` field'; + break; default: message = 'Something went wrong'; } + } else if (err.message && !err.errors) { + message = err.message; } else { for (var errName in err.errors) { if (err.errors[errName].message) { diff --git a/modules/users/server/controllers/users/users.profile.server.controller.js b/modules/users/server/controllers/users/users.profile.server.controller.js index 9d2967e270..8660fa9e94 100644 --- a/modules/users/server/controllers/users/users.profile.server.controller.js +++ b/modules/users/server/controllers/users/users.profile.server.controller.js @@ -60,39 +60,82 @@ exports.changeProfilePicture = function (req, res) { var user = req.user; var upload = multer(config.uploads.profileUpload).single('newProfilePicture'); var profileUploadFileFilter = require(path.resolve('./config/lib/multer')).profileUploadFileFilter; + var existingImageUrl; // Filtering to upload only images upload.fileFilter = profileUploadFileFilter; if (user) { - upload(req, res, function (uploadError) { - if (uploadError) { - return res.status(400).send({ - message: 'Error occurred while uploading profile picture' - }); - } else { - user.profileImageURL = config.uploads.profileUpload.dest + req.file.filename; + existingImageUrl = user.profileImageURL; + uploadImage() + .then(updateUser) + .then(deleteOldImage) + .then(login) + .then(function () { + res.json(user); + }) + .catch(function (err) { + res.status(400).send(err); + }); + } else { + res.status(400).send({ + message: 'User is not signed in' + }); + } + + function uploadImage () { + return new Promise(function (resolve, reject) { + upload(req, res, function (uploadError) { + if (uploadError) { + reject(errorHandler.getErrorMessage(uploadError)); + } else { + resolve(); + } + }); + }); + } - user.save(function (saveError) { - if (saveError) { - return res.status(400).send({ - message: errorHandler.getErrorMessage(saveError) + function updateUser () { + return new Promise(function (resolve, reject) { + user.profileImageURL = config.uploads.profileUpload.dest + req.file.filename; + user.save(function (err, theuser) { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + } + + function deleteOldImage () { + return new Promise(function (resolve, reject) { + if (existingImageUrl !== User.schema.path('profileImageURL').defaultValue) { + fs.unlink(existingImageUrl, function (unlinkError) { + if (unlinkError) { + console.log(unlinkError); + reject({ + message: 'Error occurred while deleting old profile picture' }); } else { - req.login(user, function (err) { - if (err) { - res.status(400).send(err); - } else { - res.json(user); - } - }); + resolve(); } }); + } else { + resolve(); } }); - } else { - res.status(400).send({ - message: 'User is not signed in' + } + + function login () { + return new Promise(function (resolve, reject) { + req.login(user, function (err) { + if (err) { + reject(err); + } else { + resolve(); + } + }); }); } };