| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | var async = require('async'); | 
					
						
							|  |  |  | var validator = require('validator'); | 
					
						
							| 
									
										
										
										
											2016-09-14 14:33:39 +03:00
										 |  |  | var winston = require('winston'); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | var user = require('../../user'); | 
					
						
							|  |  |  | var groups = require('../../groups'); | 
					
						
							| 
									
										
										
										
											2016-10-13 11:42:29 +02:00
										 |  |  | var plugins = require('../../plugins'); | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | var meta = require('../../meta'); | 
					
						
							|  |  |  | var utils = require('../../../public/src/utils'); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | var helpers = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | helpers.getUserDataByUserSlug = function (userslug, callerUID, callback) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 	async.waterfall([ | 
					
						
							|  |  |  | 		function (next) { | 
					
						
							|  |  |  | 			user.getUidByUserslug(userslug, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function (uid, next) { | 
					
						
							|  |  |  | 			if (!uid) { | 
					
						
							| 
									
										
										
										
											2015-09-25 18:51:27 -04:00
										 |  |  | 				return callback(null, null); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			async.parallel({ | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | 				userData: function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 					user.getUserData(uid, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | 				isTargetAdmin: function (next) { | 
					
						
							|  |  |  | 					user.isAdministrator(uid, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				userSettings: function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 					user.getSettings(uid, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | 				isAdmin: function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 					user.isAdministrator(callerUID, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 				isGlobalModerator: function (next) { | 
					
						
							| 
									
										
										
										
											2016-01-25 13:36:10 +02:00
										 |  |  | 					user.isGlobalModerator(callerUID, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-24 15:58:57 -04:00
										 |  |  | 				isModerator: function (next) { | 
					
						
							|  |  |  | 					user.isModeratorOfAnyCategory(callerUID, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 				isFollowing: function (next) { | 
					
						
							| 
									
										
										
										
											2016-09-14 14:33:39 +03:00
										 |  |  | 					user.isFollowing(callerUID, uid, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 				ips: function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 					user.getIPs(uid, 4, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 				profile_links: function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 					plugins.fireHook('filter:user.profileLinks', [], next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 				profile_menu: function (next) { | 
					
						
							| 
									
										
										
										
											2016-09-14 15:56:35 +03:00
										 |  |  | 					plugins.fireHook('filter:user.profileMenu', {uid: uid, callerUID: callerUID, links: []}, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 				groups: function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 					groups.getUserGroups([uid], next); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 				sso: function (next) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 					plugins.fireHook('filter:auth.list', {uid: uid, associations: []}, next); | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			}, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function (results, next) { | 
					
						
							|  |  |  | 			if (!results.userData) { | 
					
						
							|  |  |  | 				return callback(new Error('[[error:invalid-uid]]')); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var userData = results.userData; | 
					
						
							|  |  |  | 			var userSettings = results.userSettings; | 
					
						
							|  |  |  | 			var isAdmin = results.isAdmin; | 
					
						
							| 
									
										
										
										
											2016-02-16 18:04:02 +02:00
										 |  |  | 			var isGlobalModerator = results.isGlobalModerator; | 
					
						
							| 
									
										
										
										
											2016-10-24 15:58:57 -04:00
										 |  |  | 			var isModerator = results.isModerator; | 
					
						
							| 
									
										
										
										
											2016-03-24 15:10:11 -04:00
										 |  |  | 			var isSelf = parseInt(callerUID, 10) === parseInt(userData.uid, 10); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-08 14:57:55 -05:00
										 |  |  | 			userData.joindateISO = utils.toISOString(userData.joindate); | 
					
						
							| 
									
										
										
										
											2015-11-05 12:54:15 -05:00
										 |  |  | 			userData.lastonlineISO = utils.toISOString(userData.lastonline || userData.joindate); | 
					
						
							| 
									
										
										
										
											2015-12-11 15:24:49 +02:00
										 |  |  | 			userData.age = Math.max(0, userData.birthday ? Math.floor((new Date().getTime() - new Date(userData.birthday).getTime()) / 31536000000) : 0); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-20 15:07:11 -05:00
										 |  |  | 			userData.emailClass = 'hide'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:10:11 -04:00
										 |  |  | 			if (!(isAdmin || isGlobalModerator || isSelf || (userData.email && userSettings.showemail))) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 				userData.email = ''; | 
					
						
							| 
									
										
										
										
											2016-03-20 15:07:11 -05:00
										 |  |  | 			} else if (!userSettings.showemail) { | 
					
						
							|  |  |  | 				userData.emailClass = ''; | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-24 15:10:11 -04:00
										 |  |  | 			if (!isAdmin && !isGlobalModerator && !isSelf && !userSettings.showfullname) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 				userData.fullname = ''; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | 			if (isAdmin || isSelf || (isGlobalModerator && !results.isTargetAdmin)) { | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 				userData.ips = results.ips; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-24 15:58:57 -04:00
										 |  |  | 			if (!isAdmin && !isGlobalModerator && !isModerator) { | 
					
						
							| 
									
										
										
										
											2016-09-30 18:42:19 +03:00
										 |  |  | 				userData.moderationNote = undefined; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			userData.uid = userData.uid; | 
					
						
							|  |  |  | 			userData.yourid = callerUID; | 
					
						
							|  |  |  | 			userData.theirid = userData.uid; | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | 			userData.isTargetAdmin = results.isTargetAdmin; | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			userData.isAdmin = isAdmin; | 
					
						
							| 
									
										
										
										
											2016-02-16 18:04:02 +02:00
										 |  |  | 			userData.isGlobalModerator = isGlobalModerator; | 
					
						
							| 
									
										
										
										
											2016-10-24 15:58:57 -04:00
										 |  |  | 			userData.isModerator = isModerator; | 
					
						
							| 
									
										
										
										
											2016-09-21 12:55:44 +03:00
										 |  |  | 			userData.isAdminOrGlobalModerator = isAdmin || isGlobalModerator; | 
					
						
							| 
									
										
										
										
											2016-10-24 15:58:57 -04:00
										 |  |  | 			userData.isAdminOrGlobalModeratorOrModerator = isAdmin || isGlobalModerator || isModerator; | 
					
						
							| 
									
										
										
										
											2016-12-02 10:50:42 -05:00
										 |  |  | 			userData.isSelfOrAdminOrGlobalModerator = isSelf || isAdmin || isGlobalModerator; | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | 			userData.canEdit = isAdmin || (isGlobalModerator && !results.isTargetAdmin); | 
					
						
							|  |  |  | 			userData.canBan = isAdmin || (isGlobalModerator && !results.isTargetAdmin); | 
					
						
							| 
									
										
										
										
											2016-03-24 15:10:11 -04:00
										 |  |  | 			userData.canChangePassword = isAdmin || (isSelf && parseInt(meta.config['password:disableEdit'], 10) !== 1); | 
					
						
							|  |  |  | 			userData.isSelf = isSelf; | 
					
						
							| 
									
										
										
										
											2016-09-14 14:33:39 +03:00
										 |  |  | 			userData.isFollowing = results.isFollowing; | 
					
						
							| 
									
										
										
										
											2016-11-15 12:45:00 +03:00
										 |  |  | 			userData.showHidden = isSelf || isAdmin || (isGlobalModerator && !results.isTargetAdmin); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : []; | 
					
						
							|  |  |  | 			userData.disableSignatures = meta.config.disableSignatures !== undefined && parseInt(meta.config.disableSignatures, 10) === 1; | 
					
						
							| 
									
										
										
										
											2016-03-02 15:15:11 +02:00
										 |  |  | 			userData['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1; | 
					
						
							|  |  |  | 			userData['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1; | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			userData['email:confirmed'] = !!parseInt(userData['email:confirmed'], 10); | 
					
						
							| 
									
										
										
										
											2016-09-14 15:56:35 +03:00
										 |  |  | 			userData.profile_links = filterLinks(results.profile_links.concat(results.profile_menu.links), isSelf); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			userData.sso = results.sso.associations; | 
					
						
							| 
									
										
										
										
											2015-11-05 12:34:39 -05:00
										 |  |  | 			userData.status = user.getStatus(userData); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			userData.banned = parseInt(userData.banned, 10) === 1; | 
					
						
							| 
									
										
										
										
											2016-08-27 15:45:15 +03:00
										 |  |  | 			userData.website = validator.escape(String(userData.website || '')); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			userData.websiteLink = !userData.website.startsWith('http') ? 'http://' + userData.website : userData.website; | 
					
						
							|  |  |  | 			userData.websiteName = userData.website.replace(validator.escape('http://'), '').replace(validator.escape('https://'), ''); | 
					
						
							|  |  |  | 			userData.followingCount = parseInt(userData.followingCount, 10) || 0; | 
					
						
							|  |  |  | 			userData.followerCount = parseInt(userData.followerCount, 10) || 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-27 15:45:15 +03:00
										 |  |  | 			userData.email = validator.escape(String(userData.email || '')); | 
					
						
							|  |  |  | 			userData.fullname = validator.escape(String(userData.fullname || '')); | 
					
						
							|  |  |  | 			userData.location = validator.escape(String(userData.location || '')); | 
					
						
							|  |  |  | 			userData.signature = validator.escape(String(userData.signature || '')); | 
					
						
							|  |  |  | 			userData.aboutme = validator.escape(String(userData.aboutme || '')); | 
					
						
							| 
									
										
										
										
											2016-09-26 17:09:26 +03:00
										 |  |  | 			userData.birthday = validator.escape(String(userData.birthday || '')); | 
					
						
							| 
									
										
										
										
											2016-09-30 18:42:19 +03:00
										 |  |  | 			userData.moderationNote = validator.escape(String(userData.moderationNote || '')); | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 15:56:48 -04:00
										 |  |  | 			userData['cover:url'] = userData['cover:url'] || require('../../coverPhoto').getDefaultProfileCover(userData.uid); | 
					
						
							| 
									
										
										
										
											2016-12-17 16:00:39 +03:00
										 |  |  | 			userData['cover:position'] = validator.escape(String(userData['cover:position'] || '50% 50%')); | 
					
						
							| 
									
										
										
										
											2015-12-25 10:19:15 +02:00
										 |  |  | 			userData['username:disableEdit'] = !userData.isAdmin && parseInt(meta.config['username:disableEdit'], 10) === 1; | 
					
						
							|  |  |  | 			userData['email:disableEdit'] = !userData.isAdmin && parseInt(meta.config['email:disableEdit'], 10) === 1; | 
					
						
							| 
									
										
										
										
											2015-10-29 15:56:48 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			next(null, userData); | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 	], callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | helpers.getBaseUser = function (userslug, callerUID, callback) { | 
					
						
							| 
									
										
										
										
											2016-09-14 14:33:39 +03:00
										 |  |  | 	winston.warn('helpers.getBaseUser deprecated please use helpers.getUserDataByUserSlug'); | 
					
						
							|  |  |  | 	helpers.getUserDataByUserSlug(userslug, callerUID, callback); | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-05 21:03:01 -05:00
										 |  |  | function filterLinks(links, self) { | 
					
						
							| 
									
										
										
										
											2016-10-13 11:43:39 +02:00
										 |  |  | 	return links.filter(function (link) { | 
					
						
							| 
									
										
										
										
											2015-11-05 21:03:01 -05:00
										 |  |  | 		return link && (link.public || self); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-20 15:07:11 -05:00
										 |  |  | module.exports = helpers; |