Merge commit '84ec1c80d283cbea8b186629e7b1de49d91cf9ba'

* commit '84ec1c80d283cbea8b186629e7b1de49d91cf9ba':
  fix(heroku): fix invalid app.json (#1901)
  feat(deps): dependencies upgrade (#1887)
  release(0.6.0): MEAN.JS 0.6.0 (#1863)
  feat(readme): Deploy to Heroku button (#1854)
  fix(users): Spacing Issues
  Abstracted OAuth routes to use req param to identify strategy & moved scope to actual strategy definition.
  Save profile images to Amazon S3 (#1857)
  fix(build): Require correct dependencies for prod build (#1855)
  fix(eslint): Make `space-before-function-paren` rule consistent with other rules (#1858)
  fix(gulpfile): show error on uglify (#1860)
  feat(core): Add manifest.json (#1851)

# Conflicts:
#	CHANGELOG.md
#	README.md
#	modules/core/client/views/header.client.view.html
#	modules/users/client/views/settings/change-profile-picture.client.view.html
#	modules/users/server/controllers/users/users.profile.server.controller.js
#	package.json
This commit is contained in:
OldHawk
2017-10-13 15:43:39 +08:00
31 changed files with 11536 additions and 172 deletions

View File

@@ -9,6 +9,9 @@ var _ = require('lodash'),
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
mongoose = require('mongoose'),
multer = require('multer'),
multerS3 = require('multer-s3'),
aws = require('aws-sdk'),
amazonS3URI = require('amazon-s3-uri'),
config = require(path.resolve('./config/config')),
User = mongoose.model('User'),
validator = require('validator');
@@ -16,6 +19,18 @@ var _ = require('lodash'),
var whitelistedFields = ['firstName', 'lastName', 'email', 'username'];
var mtDebug = require(path.resolve('./config/lib/debug'));
var useS3Storage = config.uploads.storage === 's3' && config.aws.s3;
var s3;
if (useS3Storage) {
aws.config.update({
accessKeyId: config.aws.s3.accessKeyId,
secretAccessKey: config.aws.s3.secretAccessKey
});
s3 = new aws.S3();
}
/**
* Update user details
*/
@@ -58,10 +73,24 @@ exports.update = function (req, res) {
exports.changeProfilePicture = function (req, res) {
var user = req.user;
var existingImageUrl;
var multerConfig;
if (useS3Storage) {
multerConfig = {
storage: multerS3({
s3: s3,
bucket: config.aws.s3.bucket,
acl: 'public-read'
})
};
} else {
multerConfig = config.uploads.profile.image;
}
// Filtering to upload only images
var multerConfig = config.uploads.profile.image;
multerConfig.fileFilter = require(path.resolve('./config/lib/multer')).imageFileFilter;
var upload = multer(multerConfig).single('newProfilePicture');
if (user) {
@@ -96,7 +125,7 @@ exports.changeProfilePicture = function (req, res) {
function updateUser() {
return new Promise(function (resolve, reject) {
user.profileImageURL = config.uploads.profile.image.dest + req.file.filename;
user.profileImageURL = config.uploads.storage === 's3' && config.aws.s3 ? req.file.location : '/' + req.file.path;
user.save(function (err, theuser) {
if (err) {
reject(err);
@@ -110,24 +139,47 @@ exports.changeProfilePicture = function (req, res) {
function deleteOldImage() {
return new Promise(function (resolve, reject) {
if (existingImageUrl !== User.schema.path('profileImageURL').defaultValue) {
fs.unlink(existingImageUrl, function (unlinkError) {
if (unlinkError) {
if (useS3Storage) {
try {
var { region, bucket, key } = amazonS3URI(existingImageUrl);
var params = {
Bucket: config.aws.s3.bucket,
Key: key
};
// If file didn't exist, no need to reject promise
if (unlinkError.code === 'ENOENT') {
mtDebug.debugRed('Removing profile image failed because file did not exist.');
return resolve();
}
s3.deleteObject(params, function (err) {
if (err) {
console.log('Error occurred while deleting old profile picture.');
console.log('Check if you have sufficient permissions : ' + err);
}
console.error(unlinkError);
reject({
message: 'Error occurred while deleting old profile picture'
resolve();
});
} else {
resolve();
} catch (err) {
console.warn('${existingImageUrl} is not a valid S3 uri');
return resolve();
}
});
} else {
fs.unlink(path.resolve('.' + existingImageUrl), function (unlinkError) {
if (unlinkError) {
// If file didn't exist, no need to reject promise
if (unlinkError.code === 'ENOENT') {
console.log('Removing profile image failed because file did not exist.');
return resolve();
}
console.error(unlinkError);
reject({
message: 'Error occurred while deleting old profile picture'
});
} else {
resolve();
}
});
}
} else {
resolve();
}