| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var groups = require('../../groups'), | 
					
						
							|  |  |  | 	user = require('../../user'), | 
					
						
							|  |  |  | 	events = require('../../events'), | 
					
						
							| 
									
										
										
										
											2014-04-28 22:39:27 -04:00
										 |  |  | 	websockets = require('../index'), | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 	async = require('async'), | 
					
						
							|  |  |  | 	User = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | User.makeAdmin = function(socket, theirid, callback) { | 
					
						
							|  |  |  | 	groups.join('administrators', theirid, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | User.removeAdmin = function(socket, theirid, callback) { | 
					
						
							|  |  |  | 	groups.leave('administrators', theirid, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | User.createUser = function(socket, userData, callback) { | 
					
						
							|  |  |  | 	if (!userData) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	user.create(userData, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | User.banUser = function(socket, theirid, callback) { | 
					
						
							|  |  |  | 	user.isAdministrator(theirid, function(err, isAdmin) { | 
					
						
							|  |  |  | 		if (err || isAdmin) { | 
					
						
							|  |  |  | 			return callback(err || new Error('[[error:cant-ban-other-admins]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		user.ban(theirid, function(err) { | 
					
						
							|  |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-28 22:39:27 -04:00
										 |  |  | 			var sockets = websockets.getUserSockets(theirid); | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			for(var i=0; i<sockets.length; ++i) { | 
					
						
							|  |  |  | 				sockets[i].emit('event:banned'); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-28 22:39:27 -04:00
										 |  |  | 			websockets.logoutUser(theirid); | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 			callback(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | User.unbanUser = function(socket, theirid, callback) { | 
					
						
							|  |  |  | 	user.unban(theirid, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | User.deleteUser = function(socket, theirid, callback) { | 
					
						
							|  |  |  | 	user.delete(theirid, function(err) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		events.logAdminUserDelete(socket.uid, theirid); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-28 22:39:27 -04:00
										 |  |  | 		websockets.logoutUser(theirid); | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 		callback(); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | User.search = function(socket, username, callback) { | 
					
						
							|  |  |  | 	user.search(username, function(err, data) { | 
					
						
							|  |  |  | 		function isAdmin(userData, next) { | 
					
						
							|  |  |  | 			user.isAdministrator(userData.uid, function(err, isAdmin) { | 
					
						
							|  |  |  | 				if(err) { | 
					
						
							|  |  |  | 					return next(err); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				userData.administrator = isAdmin?'1':'0'; | 
					
						
							|  |  |  | 				next(); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		async.each(data.users, isAdmin, function(err) { | 
					
						
							|  |  |  | 			callback(err, data); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = User; |