From cea9743087d86e2580dec99b64fb770bccddc070 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 21 Aug 2024 13:13:39 +0200 Subject: [PATCH] Split email search into multiple queries --- website/server/controllers/api-v4/admin.js | 40 ++++++++++++++-------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/website/server/controllers/api-v4/admin.js b/website/server/controllers/api-v4/admin.js index aa980ce9c3..29ca8c8aed 100644 --- a/website/server/controllers/api-v4/admin.js +++ b/website/server/controllers/api-v4/admin.js @@ -36,27 +36,39 @@ api.getHero = { const re = new RegExp(String.raw`^${userIdentifier.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`); let query; + let users = []; if (validator.isUUID(userIdentifier)) { query = { _id: userIdentifier }; } else if (validator.isEmail(userIdentifier)) { - query = { - $or: [ - { 'auth.local.email': { $regex: re, $options: 'i' } }, - { 'auth.google.emails.value': { $regex: re, $options: 'i' } }, - { 'auth.apple.emails.value': { $regex: re, $options: 'i' } }, - { 'auth.facebook.emails.value': { $regex: re, $options: 'i' } }, - ], - }; + const emailFields = [ + 'auth.local.email', + 'auth.google.email', + 'auth.apple.email', + 'auth.facebook.email', + ]; + for (const field of emailFields) { + const emailQuery = { [field]: userIdentifier }; + // eslint-disable-next-line no-await-in-loop + const found = await User.findOne(emailQuery) + .select('contributor backer profile auth') + .lean() + .exec(); + if (found && found.size >= 0) { + users.push(found); + } + } } else { query = { 'auth.local.lowerCaseUsername': { $regex: re, $options: 'i' } }; } - const users = await User - .find(query) - .select('contributor backer profile auth') - .limit(30) - .lean() - .exec(); + if (query) { + users = await User + .find(query) + .select('contributor backer profile auth') + .limit(30) + .lean() + .exec(); + } res.respond(200, users); }, };