'use strict'; /** * Module dependencies */ 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'); var whitelistedFields = ['firstName', 'lastName', 'email', 'username']; /** * Update user details */ exports.update = function (req, res) { // Init Variables var user = req.user; if (user) { // Update whitelisted fields only user = _.extend(user, _.pick(req.body, whitelistedFields)); user.updated = Date.now(); user.displayName = user.firstName + ' ' + user.lastName; 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' }); } }; /** * 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; 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(); } }); }); } 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(); } }); }); } }; /** * Send User */ exports.me = function (req, res) { res.json(req.user || null); };