| 
									
										
										
										
											2015-01-07 16:55:14 -05:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var	groups = require('../groups'), | 
					
						
							| 
									
										
										
										
											2015-01-08 16:50:31 -05:00
										 |  |  | 	meta = require('../meta'), | 
					
						
							| 
									
										
										
										
											2015-01-22 16:01:17 -05:00
										 |  |  | 	user = require('../user'), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	async = require('async'), | 
					
						
							| 
									
										
										
										
											2015-01-07 16:55:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	SocketGroups = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SocketGroups.join = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if (!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-04 00:46:51 -05:00
										 |  |  | 	if (!parseInt(socket.uid, 10)) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-uid]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-11 17:44:51 -05:00
										 |  |  | 	if (meta.config.allowPrivateGroups !== '0') { | 
					
						
							| 
									
										
										
										
											2015-01-22 16:01:17 -05:00
										 |  |  | 		async.parallel({ | 
					
						
							|  |  |  | 			isAdmin: async.apply(user.isAdministrator, socket.uid), | 
					
						
							|  |  |  | 			isPrivate: async.apply(groups.isPrivate, data.groupName) | 
					
						
							|  |  |  | 		}, function(err, checks) { | 
					
						
							|  |  |  | 			if (checks.isPrivate && !checks.isAdmin) { | 
					
						
							| 
									
										
										
										
											2015-01-08 16:50:31 -05:00
										 |  |  | 				groups.requestMembership(data.groupName, socket.uid, callback); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				groups.join(data.groupName, socket.uid, callback); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		groups.join(data.groupName, socket.uid, callback); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-01-07 16:55:14 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SocketGroups.leave = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if (!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-04 12:09:54 -05:00
										 |  |  | 	if (!parseInt(socket.uid, 10)) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-uid]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-07 16:55:14 -05:00
										 |  |  | 	groups.leave(data.groupName, socket.uid, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-08 15:13:05 -05:00
										 |  |  | SocketGroups.grant = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if (!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	groups.ownership.isOwner(socket.uid, data.groupName, function(err, isOwner) { | 
					
						
							|  |  |  | 		if (!isOwner) { | 
					
						
							|  |  |  | 			return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		groups.ownership.grant(data.toUid, data.groupName, callback); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SocketGroups.rescind = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if (!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	groups.ownership.isOwner(socket.uid, data.groupName, function(err, isOwner) { | 
					
						
							|  |  |  | 		if (!isOwner) { | 
					
						
							|  |  |  | 			return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		groups.ownership.rescind(data.toUid, data.groupName, callback); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-08 17:23:40 -05:00
										 |  |  | SocketGroups.accept = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if (!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	groups.ownership.isOwner(socket.uid, data.groupName, function(err, isOwner) { | 
					
						
							|  |  |  | 		if (!isOwner) { | 
					
						
							|  |  |  | 			return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		groups.acceptMembership(data.groupName, data.toUid, callback); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SocketGroups.reject = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if (!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	groups.ownership.isOwner(socket.uid, data.groupName, function(err, isOwner) { | 
					
						
							|  |  |  | 		if (!isOwner) { | 
					
						
							|  |  |  | 			return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		groups.rejectMembership(data.groupName, data.toUid, callback); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-09 13:51:27 -05:00
										 |  |  | SocketGroups.update = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if(!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	groups.ownership.isOwner(socket.uid, data.groupName, function(err, isOwner) { | 
					
						
							|  |  |  | 		if (!isOwner) { | 
					
						
							|  |  |  | 			return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		groups.update(data.groupName, data.values, callback); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-12 13:00:23 -05:00
										 |  |  | SocketGroups.create = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if(!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} else if (socket.uid === 0) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	data.ownerUid = socket.uid; | 
					
						
							|  |  |  | 	groups.create(data, callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-11 18:17:49 -05:00
										 |  |  | SocketGroups.delete = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if(!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-23 07:27:49 -05:00
										 |  |  | 	var tasks = { | 
					
						
							|  |  |  | 			isOwner: async.apply(groups.ownership.isOwner, socket.uid, data.groupName), | 
					
						
							|  |  |  | 			isAdmin: async.apply(user.isAdministrator, socket.uid) | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	async.parallel(tasks, function(err, checks) { | 
					
						
							|  |  |  | 		if (!checks.isOwner && !checks.isAdmin) { | 
					
						
							| 
									
										
										
										
											2015-01-11 18:17:49 -05:00
										 |  |  | 			return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		groups.destroy(data.groupName, callback); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-21 15:43:05 -05:00
										 |  |  | SocketGroups.search = function(socket, data, callback) { | 
					
						
							| 
									
										
										
										
											2015-01-21 16:55:03 -05:00
										 |  |  | 	if (!data) { | 
					
						
							| 
									
										
										
										
											2015-01-21 15:43:05 -05:00
										 |  |  | 		return callback(null, []); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-21 16:55:03 -05:00
										 |  |  | 	groups.search(data.query || '', data.options || {}, callback); | 
					
						
							| 
									
										
										
										
											2015-01-21 15:43:05 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-12 20:34:15 -05:00
										 |  |  | SocketGroups.cover = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SocketGroups.cover.get = function(socket, data, callback) { | 
					
						
							|  |  |  | 	groups.getGroupFields(data.groupName, ['cover:url', 'cover:position'], callback); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SocketGroups.cover.update = function(socket, data, callback) { | 
					
						
							|  |  |  | 	if(!data) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:invalid-data]]')); | 
					
						
							|  |  |  | 	} else if (socket.uid === 0) { | 
					
						
							|  |  |  | 		return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	groups.ownership.isOwner(socket.uid, data.groupName, function(err, isOwner) { | 
					
						
							|  |  |  | 		if (!isOwner) { | 
					
						
							|  |  |  | 			return callback(new Error('[[error:no-privileges]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		groups.updateCover(data, callback); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-07 16:55:14 -05:00
										 |  |  | module.exports = SocketGroups; |