| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | var async = require('async'); | 
					
						
							|  |  |  | var fs = require('fs'); | 
					
						
							|  |  |  | var nconf = require('nconf'); | 
					
						
							|  |  |  | var winston = require('winston'); | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | var db = require('../../database'); | 
					
						
							|  |  |  | var user = require('../../user'); | 
					
						
							| 
									
										
										
										
											2016-02-10 11:33:41 +02:00
										 |  |  | var meta = require('../../meta'); | 
					
						
							| 
									
										
										
										
											2016-02-24 18:04:14 -05:00
										 |  |  | var plugins = require('../../plugins'); | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | var helpers = require('../helpers'); | 
					
						
							| 
									
										
										
										
											2016-04-14 18:41:47 +03:00
										 |  |  | var groups = require('../../groups'); | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | var accountHelpers = require('./helpers'); | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | var privileges = require('../../privileges'); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | var editController = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | editController.get = function (req, res, callback) { | 
					
						
							|  |  |  | 	accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, function (err, userData) { | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 		if (err || !userData) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-10 11:33:41 +02:00
										 |  |  | 		userData.maximumSignatureLength = parseInt(meta.config.maximumSignatureLength, 10) || 255; | 
					
						
							|  |  |  | 		userData.maximumAboutMeLength = parseInt(meta.config.maximumAboutMeLength, 10) || 1000; | 
					
						
							| 
									
										
										
										
											2016-02-10 12:53:39 +02:00
										 |  |  | 		userData.maximumProfileImageSize = parseInt(meta.config.maximumProfileImageSize, 10); | 
					
						
							| 
									
										
										
										
											2017-02-18 14:29:52 -07:00
										 |  |  | 		userData.allowProfileImageUploads = parseInt(meta.config.allowProfileImageUploads, 10) === 1; | 
					
						
							| 
									
										
										
										
											2016-02-10 12:53:39 +02:00
										 |  |  | 		userData.allowAccountDelete = parseInt(meta.config.allowAccountDelete, 10) === 1; | 
					
						
							| 
									
										
										
										
											2017-02-19 08:30:30 +00:00
										 |  |  | 		userData.profileImageDimension = parseInt(meta.config.profileImageDimension, 10) || 128; | 
					
						
							| 
									
										
										
										
											2016-04-14 18:41:47 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		userData.groups = userData.groups.filter(function (group) { | 
					
						
							| 
									
										
										
										
											2016-04-14 18:41:47 +03:00
										 |  |  | 			return group && group.userTitleEnabled && !groups.isPrivilegeGroup(group.name) && group.name !== 'registered-users'; | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		userData.groups.forEach(function (group) { | 
					
						
							| 
									
										
										
										
											2016-04-14 18:41:47 +03:00
										 |  |  | 			group.selected = group.name === userData.groupTitle; | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-02-10 11:33:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 		userData.title = '[[pages:account/edit, ' + userData.username + ']]'; | 
					
						
							| 
									
										
										
										
											2017-02-23 18:31:49 -07:00
										 |  |  | 		userData.breadcrumbs = helpers.buildBreadcrumbs([ | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				text: userData.username, | 
					
						
							|  |  |  | 				url: '/user/' + userData.userslug, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				text: '[[user:edit]]', | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		]); | 
					
						
							| 
									
										
										
										
											2016-02-24 18:04:14 -05:00
										 |  |  | 		userData.editButtons = []; | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		plugins.fireHook('filter:user.account.edit', userData, function (err, userData) { | 
					
						
							| 
									
										
										
										
											2016-02-24 18:04:14 -05:00
										 |  |  | 			if (err) { | 
					
						
							| 
									
										
										
										
											2016-04-14 18:41:47 +03:00
										 |  |  | 				return callback(err); | 
					
						
							| 
									
										
										
										
											2016-02-24 18:04:14 -05:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			res.render('account/edit', userData); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | editController.password = function (req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 	renderRoute('password', req, res, next); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | editController.username = function (req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 	renderRoute('username', req, res, next); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | editController.email = function (req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 	renderRoute('email', req, res, next); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function renderRoute(name, req, res, next) { | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	getUserData(req, next, function (err, userData) { | 
					
						
							| 
									
										
										
										
											2016-11-24 11:02:53 +03:00
										 |  |  | 		if (err || !userData) { | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | 		if ((name === 'username' && userData['username:disableEdit']) || (name === 'email' && userData['email:disableEdit'])) { | 
					
						
							|  |  |  | 			return next(); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-10 12:53:39 +02:00
										 |  |  | 		if (name === 'password') { | 
					
						
							|  |  |  | 			userData.minimumPasswordLength = parseInt(meta.config.minimumPasswordLength, 10); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 		userData.title = '[[pages:account/edit/' + name + ', ' + userData.username + ']]'; | 
					
						
							|  |  |  | 		userData.breadcrumbs = helpers.buildBreadcrumbs([ | 
					
						
							| 
									
										
										
										
											2017-02-23 18:31:49 -07:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				text: userData.username, | 
					
						
							|  |  |  | 				url: '/user/' + userData.userslug, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				text: '[[user:edit]]', | 
					
						
							|  |  |  | 				url: '/user/' + userData.userslug + '/edit', | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				text: '[[user:' + name + ']]', | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 		]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		res.render('account/edit/' + name, userData); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getUserData(req, next, callback) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 	var userData; | 
					
						
							|  |  |  | 	async.waterfall([ | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		function (data, next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			userData = data; | 
					
						
							|  |  |  | 			if (!userData) { | 
					
						
							| 
									
										
										
										
											2016-11-24 11:02:53 +03:00
										 |  |  | 				return callback(); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			db.getObjectField('user:' + userData.uid, 'password', next); | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	], function (err, password) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		userData.hasPassword = !!password; | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | 		callback(null, userData); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2015-10-09 17:52:55 -04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | editController.uploadPicture = function (req, res, next) { | 
					
						
							|  |  |  | 	var userPhoto = req.files.files[0]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-16 18:04:02 +02:00
										 |  |  | 	var updateUid; | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	async.waterfall([ | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 			user.getUidByUserslug(req.params.userslug, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		function (uid, next) { | 
					
						
							| 
									
										
										
										
											2016-02-16 18:04:02 +02:00
										 |  |  | 			updateUid = uid; | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | 			privileges.users.canEdit(req.uid, uid, next); | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 		function (isAllowed, next) { | 
					
						
							| 
									
										
										
										
											2016-02-16 18:04:02 +02:00
										 |  |  | 			if (!isAllowed) { | 
					
						
							|  |  |  | 				return helpers.notAllowed(req, res); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-04-14 18:41:47 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 			user.uploadPicture(updateUid, userPhoto, next); | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	], function (err, image) { | 
					
						
							|  |  |  | 		fs.unlink(userPhoto.path, function (err) { | 
					
						
							| 
									
										
										
										
											2016-04-07 17:47:17 -04:00
										 |  |  | 			if (err) { | 
					
						
							|  |  |  | 				winston.warn('[user/picture] Unable to delete picture ' + userPhoto.path, err); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 08:30:30 +00:00
										 |  |  | 		res.json([{ | 
					
						
							|  |  |  | 			name: userPhoto.name, | 
					
						
							| 
									
										
										
										
											2017-02-23 18:31:49 -07:00
										 |  |  | 			url: image.url.startsWith('http') ? image.url : nconf.get('relative_path') + image.url, | 
					
						
							| 
									
										
										
										
											2017-02-19 08:30:30 +00:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | editController.uploadCoverPicture = function (req, res, next) { | 
					
						
							| 
									
										
										
										
											2015-10-28 17:42:42 -04:00
										 |  |  | 	var params = JSON.parse(req.body.params); | 
					
						
							| 
									
										
										
										
											2015-11-07 18:34:40 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-28 17:42:42 -04:00
										 |  |  | 	user.updateCoverPicture({ | 
					
						
							| 
									
										
										
										
											2015-11-07 18:34:40 -05:00
										 |  |  | 		file: req.files.files[0], | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 		uid: params.uid, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	}, function (err, image) { | 
					
						
							| 
									
										
										
										
											2015-10-28 17:42:42 -04:00
										 |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return next(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 08:30:30 +00:00
										 |  |  | 		res.json([{ | 
					
						
							| 
									
										
										
										
											2017-02-23 18:31:49 -07:00
										 |  |  | 			url: image.url, | 
					
						
							| 
									
										
										
										
											2017-02-19 08:30:30 +00:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2015-10-28 17:42:42 -04:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-18 02:30:48 -07:00
										 |  |  | module.exports = editController; |