diff --git a/server/auth/email.js b/server/auth/email.js index d2b5392d..135bd3d2 100644 --- a/server/auth/email.js +++ b/server/auth/email.js @@ -20,7 +20,7 @@ router.post('email', async ctx => { ctx.assertEmail(email, 'email is required'); const user = await User.findOne({ - where: { email }, + where: { email: email.toLowerCase() }, }); if (user) { diff --git a/server/commands/userInviter.js b/server/commands/userInviter.js index 1bcfeaa9..356b393a 100644 --- a/server/commands/userInviter.js +++ b/server/commands/userInviter.js @@ -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(); diff --git a/server/commands/userInviter.test.js b/server/commands/userInviter.test.js index 53c85edc..f75aab71 100644 --- a/server/commands/userInviter.test.js +++ b/server/commands/userInviter.test.js @@ -43,7 +43,7 @@ describe('userInviter', async () => { const response = await userInviter({ invites: [ { email: 'the@same.com', name: 'Test' }, - { email: 'the@same.com', name: 'Test' }, + { email: 'the@SAME.COM', name: 'Test' }, ], user, ip,