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

146 lines
3.4 KiB
JavaScript
Raw Normal View History

2014-11-10 23:12:33 +02:00
'use strict';
/**
* Module dependencies
2014-11-10 23:12:33 +02:00
*/
var _ = require('lodash'),
fs = require('fs'),
path = require('path'),
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
mongoose = require('mongoose'),
multer = require('multer'),
config = require(path.resolve('./config/config')),
User = mongoose.model('User');
2014-11-10 23:12:33 +02:00
var whitelistedFields = ['firstName', 'lastName', 'email', 'username'];
2014-11-10 23:12:33 +02:00
/**
* Update user details
*/
exports.update = function (req, res) {
// Init Variables
var user = req.user;
2014-11-10 23:12:33 +02:00
if (user) {
// Update whitelisted fields only
user = _.extend(user, _.pick(req.body, whitelistedFields));
user.updated = Date.now();
user.displayName = user.firstName + ' ' + user.lastName;
2014-11-10 23:12:33 +02:00
user.save(function (err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
req.login(user, function (err) {
if (err) {
res.status(400).send(err);
} else {
res.json(user);
}
});
}
});
} else {
res.status(400).send({
message: 'User is not signed in'
});
}
2014-11-10 23:12:33 +02:00
};
/**
* Update profile picture
*/
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;
2014-11-10 23:12:33 +02:00
if (user) {
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();
}
});
});
}
2014-11-10 23:12:33 +02:00
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 {
resolve();
}
});
} else {
resolve();
}
});
}
function login () {
return new Promise(function (resolve, reject) {
req.login(user, function (err) {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
2014-11-10 23:12:33 +02:00
};
/**
* Send User
*/
exports.me = function (req, res) {
res.json(req.user || null);
2014-11-10 23:12:33 +02:00
};