feat: additional events logged for various group actions

closes #7841
v1.18.x
Julian Lam 6 years ago
parent 71b205a889
commit 1ce33faaea

@ -40,8 +40,18 @@ events.types = [
'ip-blacklist-addRule', 'ip-blacklist-addRule',
'registration-approved', 'registration-approved',
'registration-rejected', 'registration-rejected',
'accept-membership', 'group-join',
'reject-membership', 'group-request-membership',
'group-add-member',
'group-leave',
'group-owner-grant',
'group-owner-rescind',
'group-accept-membership',
'group-reject-membership',
'group-invite',
'group-invite-accept',
'group-invite-reject',
'group-kick',
'theme-set', 'theme-set',
'export:uploads', 'export:uploads',
'account-locked', 'account-locked',

@ -32,6 +32,9 @@ SocketGroups.join = async (socket, data) => {
if (!meta.config.allowPrivateGroups) { if (!meta.config.allowPrivateGroups) {
await groups.join(data.groupName, socket.uid); await groups.join(data.groupName, socket.uid);
logGroupEvent(socket, 'group-join', {
groupName: data.groupName,
});
return; return;
} }
@ -46,8 +49,14 @@ SocketGroups.join = async (socket, data) => {
if (!results.groupData.private || results.isAdmin) { if (!results.groupData.private || results.isAdmin) {
await groups.join(data.groupName, socket.uid); await groups.join(data.groupName, socket.uid);
logGroupEvent(socket, 'group-join', {
groupName: data.groupName,
});
} else { } else {
await groups.requestMembership(data.groupName, socket.uid); await groups.requestMembership(data.groupName, socket.uid);
logGroupEvent(socket, 'group-request-membership', {
groupName: data.groupName,
});
} }
}; };
@ -61,6 +70,9 @@ SocketGroups.leave = async (socket, data) => {
} }
await groups.leave(data.groupName, socket.uid); await groups.leave(data.groupName, socket.uid);
logGroupEvent(socket, 'group-leave', {
groupName: data.groupName,
});
}; };
SocketGroups.addMember = async (socket, data) => { SocketGroups.addMember = async (socket, data) => {
@ -69,6 +81,10 @@ SocketGroups.addMember = async (socket, data) => {
throw new Error('[[error:not-allowed]]'); throw new Error('[[error:not-allowed]]');
} }
await groups.join(data.groupName, data.uid); await groups.join(data.groupName, data.uid);
logGroupEvent(socket, 'group-add-member', {
groupName: data.groupName,
targetUid: data.uid,
});
}; };
async function isOwner(socket, data) { async function isOwner(socket, data) {
@ -95,20 +111,25 @@ async function isInvited(socket, data) {
SocketGroups.grant = async (socket, data) => { SocketGroups.grant = async (socket, data) => {
await isOwner(socket, data); await isOwner(socket, data);
await groups.ownership.grant(data.toUid, data.groupName); await groups.ownership.grant(data.toUid, data.groupName);
logGroupEvent(socket, 'group-owner-grant', {
groupName: data.groupName,
targetUid: data.toUid,
});
}; };
SocketGroups.rescind = async (socket, data) => { SocketGroups.rescind = async (socket, data) => {
await isOwner(socket, data); await isOwner(socket, data);
await groups.ownership.rescind(data.toUid, data.groupName); await groups.ownership.rescind(data.toUid, data.groupName);
logGroupEvent(socket, 'group-owner-rescind', {
groupName: data.groupName,
targetUid: data.toUid,
});
}; };
SocketGroups.accept = async (socket, data) => { SocketGroups.accept = async (socket, data) => {
await isOwner(socket, data); await isOwner(socket, data);
await groups.acceptMembership(data.groupName, data.toUid); await groups.acceptMembership(data.groupName, data.toUid);
events.log({ logGroupEvent(socket, 'group-accept-membership', {
type: 'accept-membership',
uid: socket.uid,
ip: socket.ip,
groupName: data.groupName, groupName: data.groupName,
targetUid: data.toUid, targetUid: data.toUid,
}); });
@ -117,10 +138,7 @@ SocketGroups.accept = async (socket, data) => {
SocketGroups.reject = async (socket, data) => { SocketGroups.reject = async (socket, data) => {
await isOwner(socket, data); await isOwner(socket, data);
await groups.rejectMembership(data.groupName, data.toUid); await groups.rejectMembership(data.groupName, data.toUid);
events.log({ logGroupEvent(socket, 'group-reject-membership', {
type: 'reject-membership',
uid: socket.uid,
ip: socket.ip,
groupName: data.groupName, groupName: data.groupName,
targetUid: data.toUid, targetUid: data.toUid,
}); });
@ -146,6 +164,10 @@ async function acceptRejectAll(method, socket, data) {
SocketGroups.issueInvite = async (socket, data) => { SocketGroups.issueInvite = async (socket, data) => {
await isOwner(socket, data); await isOwner(socket, data);
await groups.invite(data.groupName, data.toUid); await groups.invite(data.groupName, data.toUid);
logGroupEvent(socket, 'group-invite', {
groupName: data.groupName,
targetUid: data.toUid,
});
}; };
SocketGroups.issueMassInvite = async (socket, data) => { SocketGroups.issueMassInvite = async (socket, data) => {
@ -167,6 +189,10 @@ SocketGroups.issueMassInvite = async (socket, data) => {
for (const i in uids) { for (const i in uids) {
// eslint-disable-next-line no-await-in-loop // eslint-disable-next-line no-await-in-loop
await groups.invite(data.groupName, uids[i]); await groups.invite(data.groupName, uids[i]);
logGroupEvent(socket, 'group-invite', {
groupName: data.groupName,
targetUid: data.toUid,
});
} }
}; };
@ -178,11 +204,17 @@ SocketGroups.rescindInvite = async (socket, data) => {
SocketGroups.acceptInvite = async (socket, data) => { SocketGroups.acceptInvite = async (socket, data) => {
await isInvited(socket, data); await isInvited(socket, data);
await groups.acceptMembership(data.groupName, socket.uid); await groups.acceptMembership(data.groupName, socket.uid);
logGroupEvent(socket, 'group-invite-accept', {
groupName: data.groupName,
});
}; };
SocketGroups.rejectInvite = async (socket, data) => { SocketGroups.rejectInvite = async (socket, data) => {
await isInvited(socket, data); await isInvited(socket, data);
await groups.rejectMembership(data.groupName, socket.uid); await groups.rejectMembership(data.groupName, socket.uid);
logGroupEvent(socket, 'group-invite-reject', {
groupName: data.groupName,
});
}; };
SocketGroups.update = async (socket, data) => { SocketGroups.update = async (socket, data) => {
@ -199,6 +231,10 @@ SocketGroups.kick = async (socket, data) => {
const isOwnerBit = await groups.ownership.isOwner(data.uid, data.groupName); const isOwnerBit = await groups.ownership.isOwner(data.uid, data.groupName);
await groups.kick(data.uid, data.groupName, isOwnerBit); await groups.kick(data.uid, data.groupName, isOwnerBit);
logGroupEvent(socket, 'group-kick', {
groupName: data.groupName,
targetUid: data.uid,
});
}; };
SocketGroups.create = async (socket, data) => { SocketGroups.create = async (socket, data) => {
@ -214,6 +250,9 @@ SocketGroups.create = async (socket, data) => {
} }
data.ownerUid = socket.uid; data.ownerUid = socket.uid;
await groups.create(data); await groups.create(data);
logGroupEvent(socket, 'group-create', {
groupName: data.name,
});
}; };
SocketGroups.delete = async (socket, data) => { SocketGroups.delete = async (socket, data) => {
@ -226,6 +265,9 @@ SocketGroups.delete = async (socket, data) => {
} }
await groups.destroy(data.groupName); await groups.destroy(data.groupName);
logGroupEvent(socket, 'group-delete', {
groupName: data.groupName,
});
}; };
SocketGroups.search = async (socket, data) => { SocketGroups.search = async (socket, data) => {
@ -299,4 +341,13 @@ async function canModifyGroup(uid, groupName) {
} }
} }
function logGroupEvent(socket, event, additional) {
events.log({
type: event,
uid: socket.uid,
ip: socket.ip,
...additional,
});
}
require('../promisify')(SocketGroups); require('../promisify')(SocketGroups);

Loading…
Cancel
Save