fix: Emails should be stored and processed in lowercase (#1109)

This commit is contained in:
Tom Moor
2019-12-17 19:44:50 -08:00
committed by GitHub
parent 4511fb7259
commit 89b87c5268
3 changed files with 17 additions and 9 deletions

View File

@ -17,14 +17,22 @@ export default async function userInviter({
}): Promise<{ sent: Invite[] }> {
const team = await Team.findByPk(user.teamId);
// filter out empties, duplicates and obvious non-emails
const compactedInvites = uniqBy(
invites.filter(invite => !!invite.email.trim() && invite.email.match('@')),
// filter out empties and obvious non-emails
const compactedInvites = invites.filter(
invite => !!invite.email.trim() && invite.email.match('@')
);
// normalize to lowercase and remove duplicates
const normalizedInvites = uniqBy(
compactedInvites.map(invite => ({
...invite,
email: invite.email.toLowerCase(),
})),
'email'
);
const emails = compactedInvites.map(invite => invite.email);
// filter out existing users
// filter out any existing users in the system
const emails = normalizedInvites.map(invite => invite.email);
const existingUsers = await User.findAll({
where: {
teamId: user.teamId,
@ -32,11 +40,11 @@ export default async function userInviter({
},
});
const existingEmails = existingUsers.map(user => user.email);
const filteredInvites = compactedInvites.filter(
const filteredInvites = normalizedInvites.filter(
invite => !existingEmails.includes(invite.email)
);
// send and record invites
// send and record remaining invites
await Promise.all(
filteredInvites.map(async invite => {
const transaction = await sequelize.transaction();