| 
									
										
										
										
											2014-01-31 15:13:52 -05:00
										 |  |  | var	async = require('async'), | 
					
						
							|  |  |  | 	user = require('../user'), | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	topics = require('../topics'), | 
					
						
							|  |  |  | 	SocketUser = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.exists = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if (data && data.username) { | 
					
						
							| 
									
										
										
										
											2014-01-16 16:50:41 -05:00
										 |  |  | 		user.exists(utils.slugify(data.username), callback); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.count = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	user.count(callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.emailExists = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if(data && data.email) { | 
					
						
							|  |  |  | 		user.email.exists(data.email, callback); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-19 22:07:29 -05:00
										 |  |  | SocketUser.search = function(socket, username, callback) { | 
					
						
							|  |  |  | 	user.search(username, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | // Password Reset
 | 
					
						
							|  |  |  | SocketUser.reset = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.reset.send = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if(data && data.email) { | 
					
						
							| 
									
										
										
										
											2014-01-16 21:19:29 -05:00
										 |  |  | 		user.reset.send(socket, data.email, callback); | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.reset.valid = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if(data && data.code) { | 
					
						
							| 
									
										
										
										
											2014-01-16 21:19:29 -05:00
										 |  |  | 		user.reset.validate(socket, data.code, callback); | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.reset.commit = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if(data && data.code && data.password) { | 
					
						
							| 
									
										
										
										
											2014-01-16 21:19:29 -05:00
										 |  |  | 		user.reset.commit(socket, data.code, data.password, callback); | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.isOnline = function(socket, uid, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-31 15:13:52 -05:00
										 |  |  | 	user.getUserField(uid, 'status', function(err, status) { | 
					
						
							|  |  |  | 		if(err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(!status) { | 
					
						
							|  |  |  | 			status = 'online'; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var online = module.parent.exports.isUserOnline(uid); | 
					
						
							| 
									
										
										
										
											2014-02-06 18:40:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-31 15:13:52 -05:00
										 |  |  | 		if(!online) { | 
					
						
							|  |  |  | 			status = 'offline'; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(status === 'offline') { | 
					
						
							|  |  |  | 			online = false; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		callback(null, { | 
					
						
							|  |  |  | 			online: online, | 
					
						
							|  |  |  | 			uid: uid, | 
					
						
							|  |  |  | 			timestamp: Date.now(), | 
					
						
							|  |  |  | 			status: status | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.changePassword = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if(data) { | 
					
						
							|  |  |  | 		user.changePassword(socket.uid, data, callback); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.updateProfile = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if(data) { | 
					
						
							|  |  |  | 		user.updateProfile(socket.uid, data, callback); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.changePicture = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if(!data) { | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	var type = data.type; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function updateHeader() { | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | 		user.getUserFields(socket.uid, ['picture'], function(err, fields) { | 
					
						
							| 
									
										
										
										
											2014-01-16 17:52:46 -05:00
										 |  |  | 			if(err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (fields) { | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | 				fields.uid = socket.uid; | 
					
						
							| 
									
										
										
										
											2014-01-16 17:52:46 -05:00
										 |  |  | 				socket.emit('meta.updateHeader', null, fields); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-01-16 17:52:46 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			callback(null); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (type === 'gravatar') { | 
					
						
							| 
									
										
										
										
											2014-01-16 17:52:46 -05:00
										 |  |  | 		type = 'gravatarpicture'; | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	} else if (type === 'uploaded') { | 
					
						
							| 
									
										
										
										
											2014-01-16 17:52:46 -05:00
										 |  |  | 		type = 'uploadedpicture'; | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2014-01-16 17:52:46 -05:00
										 |  |  | 		return callback(new Error('invalid-image-type')); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-16 17:52:46 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	user.getUserField(socket.uid, type, function(err, picture) { | 
					
						
							|  |  |  | 		user.setUserField(socket.uid, 'picture', picture); | 
					
						
							|  |  |  | 		updateHeader(); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.follow = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if (socket.uid && data) { | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | 		user.follow(socket.uid, data.uid, callback); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.unfollow = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if (socket.uid && data) { | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | 		user.unfollow(socket.uid, data.uid, callback); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.saveSettings = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 	if (socket.uid && data) { | 
					
						
							| 
									
										
										
										
											2014-02-10 14:15:54 -05:00
										 |  |  | 		user.saveSettings(socket.uid, data, callback); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 18:06:19 -05:00
										 |  |  | SocketUser.getOnlineUsers = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-31 15:13:52 -05:00
										 |  |  | 	var returnData = {}; | 
					
						
							|  |  |  | 	if(!data) { | 
					
						
							|  |  |  | 		return callback(new Error('invalid-data')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function getUserStatus(uid, next) { | 
					
						
							|  |  |  | 		SocketUser.isOnline(socket, uid, function(err, data) { | 
					
						
							|  |  |  | 			if(err) { | 
					
						
							|  |  |  | 				return next(err); | 
					
						
							| 
									
										
										
										
											2014-01-16 18:18:42 -05:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-01-31 15:13:52 -05:00
										 |  |  | 			returnData[uid] = data; | 
					
						
							|  |  |  | 			next(); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-31 15:13:52 -05:00
										 |  |  | 	async.each(data, getUserStatus, function(err) { | 
					
						
							|  |  |  | 		callback(err, returnData); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.getOnlineAnonCount = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-16 18:10:38 -05:00
										 |  |  | 	callback(null, module.parent.exports.getOnlineAnonCount()); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.getUnreadCount = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-21 10:06:13 -05:00
										 |  |  | 	topics.getUnreadTids(socket.uid, 0, 19, callback); | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.getActiveUsers = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | 	module.parent.exports.emitOnlineUserCount(callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 15:46:37 -05:00
										 |  |  | SocketUser.loadMore = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2014-01-31 15:47:26 -05:00
										 |  |  | 	if(!data || !data.set || parseInt(data.after, 10) < 0) { | 
					
						
							|  |  |  | 		return callback(new Error('invalid-data')); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-10 16:00:03 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-31 15:47:26 -05:00
										 |  |  | 	var start = data.after, | 
					
						
							|  |  |  | 		end = start + 19; | 
					
						
							| 
									
										
										
										
											2014-01-16 18:10:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-31 15:47:26 -05:00
										 |  |  | 	user.getUsers(data.set, start, end, function(err, userData) { | 
					
						
							|  |  |  | 		if(err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-06 17:12:13 -05:00
										 |  |  | 		user.isAdministrator(socket.uid, function (err, isAdministrator) { | 
					
						
							|  |  |  | 			if(err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-01-31 15:47:26 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-06 17:12:13 -05:00
										 |  |  | 			if(!isAdministrator && data.set === 'users:online') { | 
					
						
							|  |  |  | 				userData = userData.filter(function(item) { | 
					
						
							|  |  |  | 					return item.status !== 'offline'; | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			callback(null, { | 
					
						
							|  |  |  | 				users: userData | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2014-01-16 18:10:38 -05:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2014-01-31 15:47:26 -05:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-01-10 16:00:03 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-06 18:40:01 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-31 15:13:52 -05:00
										 |  |  | SocketUser.setStatus = function(socket, status, callback) { | 
					
						
							|  |  |  | 	var server = require('./index'); | 
					
						
							|  |  |  | 	user.setUserField(socket.uid, 'status', status, function(err) { | 
					
						
							|  |  |  | 		SocketUser.isOnline(socket, socket.uid, function(err, data) { | 
					
						
							|  |  |  | 			server.server.sockets.emit('user.isOnline', err, data); | 
					
						
							| 
									
										
										
										
											2014-01-31 16:21:41 -05:00
										 |  |  | 			callback(err, data); | 
					
						
							| 
									
										
										
										
											2014-01-31 15:13:52 -05:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-09 22:46:51 -05:00
										 |  |  | /* Exports */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = SocketUser; |