| 
									
										
										
										
											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 = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | User.makeAdmins = function(socket, uids, callback) { | 
					
						
							|  |  |  | 	toggleAdmin(uids, true, callback); | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | User.removeAdmins = function(socket, uids, callback) { | 
					
						
							|  |  |  | 	toggleAdmin(uids, false, callback); | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | function toggleAdmin(uids, isAdmin, callback) { | 
					
						
							|  |  |  | 	if(!Array.isArray(uids)) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	async.each(uids, function(uid, next) { | 
					
						
							|  |  |  | 		groups[isAdmin ? 'join' : 'leave']('administrators', uid, next); | 
					
						
							|  |  |  | 	}, callback); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | User.createUser = function(socket, userData, callback) { | 
					
						
							|  |  |  | 	if (!userData) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	user.create(userData, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | User.banUsers = function(socket, uids, callback) { | 
					
						
							| 
									
										
										
										
											2014-05-13 16:44:40 -04:00
										 |  |  | 	toggleBan(uids, User.banUser, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | User.unbanUsers = function(socket, uids, callback) { | 
					
						
							|  |  |  | 	toggleBan(uids, user.unban, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-13 16:45:37 -04:00
										 |  |  | function toggleBan(uids, method, callback) { | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | 	if(!Array.isArray(uids)) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-05-13 16:44:40 -04:00
										 |  |  | 	async.each(uids, method, callback); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-12 14:51:39 -04:00
										 |  |  | User.banUser = function(uid, callback) { | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | 	user.isAdministrator(uid, function(err, isAdmin) { | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 		if (err || isAdmin) { | 
					
						
							|  |  |  | 			return callback(err || new Error('[[error:cant-ban-other-admins]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | 		user.ban(uid, function(err) { | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | 			var sockets = websockets.getUserSockets(uid); | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			for(var i=0; i<sockets.length; ++i) { | 
					
						
							|  |  |  | 				sockets[i].emit('event:banned'); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | 			websockets.logoutUser(uid); | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 			callback(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-05-12 14:51:39 -04:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | User.deleteUsers = function(socket, uids, callback) { | 
					
						
							|  |  |  | 	if(!Array.isArray(uids)) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | 	async.each(uids, function(uid, next) { | 
					
						
							|  |  |  | 		user.delete(uid, function(err) { | 
					
						
							|  |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return next(err); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-05 16:48:09 -04:00
										 |  |  | 			events.logAdminUserDelete(socket.uid, uid); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			websockets.logoutUser(uid); | 
					
						
							|  |  |  | 			next(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}, callback); | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-04 11:58:05 -04:00
										 |  |  | 				userData.administrator = isAdmin; | 
					
						
							| 
									
										
										
										
											2014-04-15 02:25:42 -04:00
										 |  |  | 				next(); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		async.each(data.users, isAdmin, function(err) { | 
					
						
							|  |  |  | 			callback(err, data); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = User; |