You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.3 KiB
JavaScript

'use strict';
const groups = require('../../groups');
const Groups = module.exports;
Groups.create = async function (socket, data) {
if (!data) {
throw new Error('[[error:invalid-data]]');
} else if (groups.isPrivilegeGroup(data.name)) {
throw new Error('[[error:invalid-group-name]]');
}
return await groups.create({
name: data.name,
description: data.description,
private: data.private,
hidden: data.hidden,
ownerUid: socket.uid,
});
};
Groups.join = async (socket, data) => {
if (!data) {
throw new Error('[[error:invalid-data]]');
}
const isMember = await groups.isMember(data.uid, data.groupName);
if (isMember) {
throw new Error('[[error:group-already-member]]');
}
return await groups.join(data.groupName, data.uid);
};
Groups.leave = async function (socket, data) {
if (!data) {
throw new Error('[[error:invalid-data]]');
}
if (socket.uid === parseInt(data.uid, 10) && data.groupName === 'administrators') {
throw new Error('[[error:cant-remove-self-as-admin]]');
}
const isMember = await groups.isMember(data.uid, data.groupName);
if (!isMember) {
throw new Error('[[error:group-not-member]]');
}
await groups.leave(data.groupName, data.uid);
};
Groups.update = async function (socket, data) {
if (!data) {
throw new Error('[[error:invalid-data]]');
}
await groups.update(data.groupName, data.values);
};