| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var async = require('async'), | 
					
						
							|  |  |  | 	validator = require('validator'), | 
					
						
							| 
									
										
										
										
											2015-10-28 18:02:49 -04:00
										 |  |  | 	nconf = require('nconf'), | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	user = require('../../user'), | 
					
						
							|  |  |  | 	groups = require('../../groups'), | 
					
						
							|  |  |  | 	plugins =require('../../plugins'), | 
					
						
							|  |  |  | 	meta = require('../../meta'), | 
					
						
							|  |  |  | 	utils = require('../../../public/src/utils'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var helpers = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | helpers.getUserDataByUserSlug = function(userslug, callerUID, callback) { | 
					
						
							|  |  |  | 	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({ | 
					
						
							|  |  |  | 				userData : function(next) { | 
					
						
							|  |  |  | 					user.getUserData(uid, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				userSettings : function(next) { | 
					
						
							|  |  |  | 					user.getSettings(uid, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				isAdmin : function(next) { | 
					
						
							|  |  |  | 					user.isAdministrator(callerUID, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				ips: function(next) { | 
					
						
							|  |  |  | 					user.getIPs(uid, 4, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				profile_links: function(next) { | 
					
						
							|  |  |  | 					plugins.fireHook('filter:user.profileLinks', [], next); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				groups: function(next) { | 
					
						
							|  |  |  | 					groups.getUserGroups([uid], next); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				sso: function(next) { | 
					
						
							|  |  |  | 					plugins.fireHook('filter:auth.list', {uid: uid, associations: []}, next); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}, 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; | 
					
						
							|  |  |  | 			var self = parseInt(callerUID, 10) === parseInt(userData.uid, 10); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			userData.joindate = utils.toISOString(userData.joindate); | 
					
						
							|  |  |  | 			userData.lastonline = userData.lastonline ? utils.toISOString(userData.lastonline) : userData.joindate; | 
					
						
							|  |  |  | 			userData.age = userData.birthday ? Math.floor((new Date().getTime() - new Date(userData.birthday).getTime()) / 31536000000) : ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (!(isAdmin || self || (userData.email && userSettings.showemail))) { | 
					
						
							|  |  |  | 				userData.email = ''; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			userData.emailClass = (self && !userSettings.showemail) ? '' : 'hide'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (!self && !userSettings.showfullname) { | 
					
						
							|  |  |  | 				userData.fullname = ''; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (isAdmin || self) { | 
					
						
							|  |  |  | 				userData.ips = results.ips; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			userData.uid = userData.uid; | 
					
						
							|  |  |  | 			userData.yourid = callerUID; | 
					
						
							|  |  |  | 			userData.theirid = userData.uid; | 
					
						
							|  |  |  | 			userData.isAdmin = isAdmin; | 
					
						
							|  |  |  | 			userData.isSelf = self; | 
					
						
							|  |  |  | 			userData.showHidden = self || isAdmin; | 
					
						
							|  |  |  | 			userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : []; | 
					
						
							|  |  |  | 			userData.disableSignatures = meta.config.disableSignatures !== undefined && parseInt(meta.config.disableSignatures, 10) === 1; | 
					
						
							|  |  |  | 			userData['email:confirmed'] = !!parseInt(userData['email:confirmed'], 10); | 
					
						
							|  |  |  | 			userData.profile_links = results.profile_links; | 
					
						
							|  |  |  | 			userData.sso = results.sso.associations; | 
					
						
							|  |  |  | 			userData.status = require('../../socket.io').isUserOnline(userData.uid) ? (userData.status || 'online') : 'offline'; | 
					
						
							|  |  |  | 			userData.banned = parseInt(userData.banned, 10) === 1; | 
					
						
							|  |  |  | 			userData.website = validator.escape(userData.website); | 
					
						
							|  |  |  | 			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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			userData.username = validator.escape(userData.username); | 
					
						
							|  |  |  | 			userData.email = validator.escape(userData.email); | 
					
						
							|  |  |  | 			userData.fullname = validator.escape(userData.fullname); | 
					
						
							|  |  |  | 			userData.location = validator.escape(userData.location); | 
					
						
							|  |  |  | 			userData.signature = validator.escape(userData.signature); | 
					
						
							|  |  |  | 			userData.aboutme = validator.escape(userData.aboutme || ''); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 15:56:48 -04:00
										 |  |  | 			userData['cover:url'] = userData['cover:url'] || require('../../coverPhoto').getDefaultProfileCover(userData.uid); | 
					
						
							|  |  |  | 			userData['cover:position'] = userData['cover:position'] || '50% 50%'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | 			next(null, userData); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	], callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | helpers.getBaseUser = function(userslug, callerUID, callback) { | 
					
						
							|  |  |  | 	async.waterfall([ | 
					
						
							|  |  |  | 		function (next) { | 
					
						
							|  |  |  | 			user.getUidByUserslug(userslug, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function (uid, next) { | 
					
						
							|  |  |  | 			if (!uid) { | 
					
						
							|  |  |  | 				return callback(null, null); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			async.parallel({ | 
					
						
							|  |  |  | 				user: function(next) { | 
					
						
							| 
									
										
										
										
											2015-10-28 18:02:49 -04:00
										 |  |  | 					user.getUserFields(uid, ['uid', 'username', 'userslug', 'picture', 'cover:url', 'cover:position'], next); | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 				isAdmin: function(next) { | 
					
						
							|  |  |  | 					user.isAdministrator(callerUID, next); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				profile_links: function(next) { | 
					
						
							|  |  |  | 					plugins.fireHook('filter:user.profileLinks', [], next); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}, next); | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		function (results, next) { | 
					
						
							|  |  |  | 			if (!results.user) { | 
					
						
							|  |  |  | 				return callback(); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			results.user.yourid = callerUID; | 
					
						
							|  |  |  | 			results.user.theirid = results.user.uid; | 
					
						
							|  |  |  | 			results.user.isSelf = parseInt(callerUID, 10) === parseInt(results.user.uid, 10); | 
					
						
							|  |  |  | 			results.user.showHidden = results.user.isSelf || results.isAdmin; | 
					
						
							|  |  |  | 			results.user.profile_links = results.profile_links; | 
					
						
							| 
									
										
										
										
											2015-10-28 18:02:49 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 16:05:07 -04:00
										 |  |  | 			results.user['cover:url'] = results.user['cover:url'] || require('../../coverPhoto').getDefaultProfileCover(results.user.uid); | 
					
						
							|  |  |  | 			results.user['cover:position'] = results.user['cover:position'] || '50% 50%'; | 
					
						
							| 
									
										
										
										
											2015-10-28 18:02:49 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 13:11:11 -04:00
										 |  |  | 			next(null, results.user); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	], callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-25 01:52:41 -04:00
										 |  |  | module.exports = helpers; |