Skip to content
This repository was archived by the owner on Aug 30, 2021. It is now read-only.

Commit 234f0c6

Browse files
aanevlirantal
authored andcommitted
fix(user): fix changeProfilePicture to overwrite existing files
* fix(user): fix changeProfilePicture * use promises to simplify callbacks * use fs.unlink to delete old picture once the profile is updated Fixes #1415 * fix(user): fix changeProfilePicture * use promises to simplify callbacks * use fs.unlink to delete old picture once the profile is updated * log file errors to console Fixes #1415 * fix(user): fix changeProfilePicture * use promises to simplify callbacks * use fs.unlink to delete old picture once the profile is updated * log file errors to console * update error handler module to handle file upload errors Fixes #1415 * fix(user): fix changeProfilePicture * use promises to simplify callbacks * use fs.unlink to delete old picture once the profile is updated * log file errors to console * update error handler module to handle file upload errors Fixes #1415
1 parent 246c5d9 commit 234f0c6

File tree

2 files changed

+78
-21
lines changed

2 files changed

+78
-21
lines changed

modules/core/server/controllers/errors.server.controller.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
'use strict';
22

3+
/**
4+
* Module dependencies
5+
*/
6+
var path = require('path'),
7+
config = require(path.resolve('./config/config'));
8+
39
/**
410
* Get unique error field name
511
*/
@@ -39,9 +45,17 @@ exports.getErrorMessage = function (err) {
3945
case 11001:
4046
message = getUniqueErrorMessage(err);
4147
break;
48+
case 'LIMIT_FILE_SIZE':
49+
message = 'Image too big. Please maximum ' + (config.uploads.profileUpload.limits.fileSize / (1024 * 1024)).toFixed(2) + ' Mb files.';
50+
break;
51+
case 'LIMIT_UNEXPECTED_FILE':
52+
message = 'Missing `newProfilePicture` field';
53+
break;
4254
default:
4355
message = 'Something went wrong';
4456
}
57+
} else if (err.message && !err.errors) {
58+
message = err.message;
4559
} else {
4660
for (var errName in err.errors) {
4761
if (err.errors[errName].message) {

modules/users/server/controllers/users/users.profile.server.controller.js

Lines changed: 64 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -60,39 +60,82 @@ exports.changeProfilePicture = function (req, res) {
6060
var user = req.user;
6161
var upload = multer(config.uploads.profileUpload).single('newProfilePicture');
6262
var profileUploadFileFilter = require(path.resolve('./config/lib/multer')).profileUploadFileFilter;
63+
var existingImageUrl;
6364

6465
// Filtering to upload only images
6566
upload.fileFilter = profileUploadFileFilter;
6667

6768
if (user) {
68-
upload(req, res, function (uploadError) {
69-
if (uploadError) {
70-
return res.status(400).send({
71-
message: 'Error occurred while uploading profile picture'
72-
});
73-
} else {
74-
user.profileImageURL = config.uploads.profileUpload.dest + req.file.filename;
69+
existingImageUrl = user.profileImageURL;
70+
uploadImage()
71+
.then(updateUser)
72+
.then(deleteOldImage)
73+
.then(login)
74+
.then(function () {
75+
res.json(user);
76+
})
77+
.catch(function (err) {
78+
res.status(400).send(err);
79+
});
80+
} else {
81+
res.status(400).send({
82+
message: 'User is not signed in'
83+
});
84+
}
85+
86+
function uploadImage () {
87+
return new Promise(function (resolve, reject) {
88+
upload(req, res, function (uploadError) {
89+
if (uploadError) {
90+
reject(errorHandler.getErrorMessage(uploadError));
91+
} else {
92+
resolve();
93+
}
94+
});
95+
});
96+
}
7597

76-
user.save(function (saveError) {
77-
if (saveError) {
78-
return res.status(400).send({
79-
message: errorHandler.getErrorMessage(saveError)
98+
function updateUser () {
99+
return new Promise(function (resolve, reject) {
100+
user.profileImageURL = config.uploads.profileUpload.dest + req.file.filename;
101+
user.save(function (err, theuser) {
102+
if (err) {
103+
reject(err);
104+
} else {
105+
resolve();
106+
}
107+
});
108+
});
109+
}
110+
111+
function deleteOldImage () {
112+
return new Promise(function (resolve, reject) {
113+
if (existingImageUrl !== User.schema.path('profileImageURL').defaultValue) {
114+
fs.unlink(existingImageUrl, function (unlinkError) {
115+
if (unlinkError) {
116+
console.log(unlinkError);
117+
reject({
118+
message: 'Error occurred while deleting old profile picture'
80119
});
81120
} else {
82-
req.login(user, function (err) {
83-
if (err) {
84-
res.status(400).send(err);
85-
} else {
86-
res.json(user);
87-
}
88-
});
121+
resolve();
89122
}
90123
});
124+
} else {
125+
resolve();
91126
}
92127
});
93-
} else {
94-
res.status(400).send({
95-
message: 'User is not signed in'
128+
}
129+
130+
function login () {
131+
return new Promise(function (resolve, reject) {
132+
req.login(user, function (err) {
133+
if (err) {
134+
reject(err);
135+
} else {
136+
resolve();
137+
}
138+
});
96139
});
97140
}
98141
};

0 commit comments

Comments
 (0)