@@ -177,18 +177,27 @@ userSchema.methods.comparePassword = async function comparePassword(
177
177
/**
178
178
* Helper method for validating a user's api key
179
179
*/
180
- userSchema . methods . findMatchingKey = function findMatchingKey (
181
- candidateKey ,
182
- cb
180
+ userSchema . methods . findMatchingKey = async function findMatchingKey (
181
+ candidateKey
183
182
) {
184
- let foundOne = false ;
185
- this . apiKeys . forEach ( ( k ) => {
186
- if ( bcrypt . compareSync ( candidateKey , k . hashedKey ) ) {
187
- foundOne = true ;
188
- cb ( null , true , k ) ;
183
+ let keyObj = { isMatch : false , keyDocument : null } ;
184
+ /* eslint-disable no-restricted-syntax */
185
+ for ( const k of this . apiKeys ) {
186
+ try {
187
+ /* eslint-disable no-await-in-loop */
188
+ const foundOne = await bcrypt . compareSync ( candidateKey , k . hashedKey ) ;
189
+
190
+ if ( foundOne ) {
191
+ keyObj = { isMatch : true , keyDocument : k } ;
192
+ return keyObj ;
193
+ }
194
+ } catch ( error ) {
195
+ console . error ( 'Matching API key not found !' ) ;
196
+ return keyObj ;
189
197
}
190
- } ) ;
191
- if ( ! foundOne ) cb ( 'Matching API key not found !' , false , null ) ;
198
+ }
199
+
200
+ return keyObj ;
192
201
} ;
193
202
194
203
/**
@@ -197,7 +206,7 @@ userSchema.methods.findMatchingKey = function findMatchingKey(
197
206
*
198
207
* @param {string|string[] } email - Email string or array of email strings
199
208
* @callback [cb] - Optional error-first callback that passes User document
200
- * @return {Promise< Object> } - Returns Promise fulfilled by User document
209
+ * @return {Object } - Returns User Object fulfilled by User document
201
210
*/
202
211
userSchema . statics . findByEmail = async function findByEmail ( email ) {
203
212
const user = this ;
@@ -240,7 +249,7 @@ userSchema.statics.findAllByEmails = async function findAllByEmails(emails) {
240
249
* @param {string } username - Username string
241
250
* @param {Object } [options] - Optional options
242
251
* @param {boolean } options.caseInsensitive - Does a caseInsensitive query, defaults to false
243
- * @return {Promise< Object> } - Returns Promise fulfilled by User document
252
+ * @return {Object } - Returns User Object fulfilled by User document
244
253
*/
245
254
userSchema . statics . findByUsername = async function findByUsername (
246
255
username ,
@@ -279,7 +288,7 @@ userSchema.statics.findByUsername = async function findByUsername(
279
288
* default query for username or email, defaults
280
289
* to false
281
290
* @param {("email"|"username") } options.valueType - Prevents automatic type inferrence
282
- * @return {Promise< Object> } - Returns Promise fulfilled by User document
291
+ * @return {Object } - Returns User Object fulfilled by User document
283
292
*/
284
293
userSchema . statics . findByEmailOrUsername = async function findByEmailOrUsername (
285
294
value ,
@@ -321,18 +330,22 @@ userSchema.statics.findByEmailOrUsername = async function findByEmailOrUsername(
321
330
*
322
331
* @param {string } email
323
332
* @param {string } username
324
- * @callback [cb] - Optional error-first callback that passes User document
325
- * @return {Promise<Object> } - Returns Promise fulfilled by User document
333
+ * @return {Object } - Returns User Object fulfilled by User document
326
334
*/
327
- userSchema . statics . findByEmailAndUsername = function findByEmailAndUsername (
335
+ userSchema . statics . findByEmailAndUsername = async function findByEmailAndUsername (
328
336
email ,
329
- username ,
330
- cb
337
+ username
331
338
) {
339
+ const user = this ;
332
340
const query = {
333
341
$or : [ { email } , { username } ]
334
342
} ;
335
- return this . findOne ( query ) . collation ( { locale : 'en' , strength : 2 } ) . exec ( cb ) ;
343
+ const foundUser = await user
344
+ . findOne ( query )
345
+ . collation ( { locale : 'en' , strength : 2 } )
346
+ . exec ( ) ;
347
+
348
+ return foundUser ;
336
349
} ;
337
350
338
351
userSchema . statics . EmailConfirmation = EmailConfirmationStates ;
0 commit comments