@@ -5,7 +5,6 @@ const async = require('async');
5
5
const escapeRegexp = require ( 'escape-regexp' ) ;
6
6
const config = require ( '../../config' ) ;
7
7
const MongoClient = require ( 'mongodb' ) . MongoClient ;
8
- const ObjectID = require ( 'mongodb' ) . ObjectID ;
9
8
const _ = require ( 'lodash' ) ;
10
9
11
10
const TIME_TO_REFRESH = 1000 * 60 * 60 ;
@@ -96,12 +95,14 @@ function addUser(userToAdd, cbk) {
96
95
user . roles = [ 'user' ] ;
97
96
}
98
97
99
- return usersCollection . insert ( user , function ( err , result ) {
98
+ return usersCollection . insertOne ( user , function ( err , insertResult ) {
100
99
if ( err ) {
101
100
return cbk ( err , null ) ;
102
101
}
103
102
104
- return cbk ( null , result [ 0 ] ) ;
103
+ user . _id = insertResult . insertedId ;
104
+
105
+ return cbk ( null , user ) ;
105
106
} ) ;
106
107
}
107
108
return cbk ( err ) ;
@@ -123,7 +124,7 @@ function findByEmail(email, callback) {
123
124
124
125
const targetEmail = makeRegEx ( email ) ;
125
126
126
- usersCollection . find ( { username : targetEmail } , { password : 0 } ) . toArray ( function ( error , foundUsers ) {
127
+ usersCollection . count ( { username : targetEmail } , function ( error , totalCount ) {
127
128
128
129
if ( error ) {
129
130
return callback ( {
@@ -135,106 +136,75 @@ function findByEmail(email, callback) {
135
136
} ) ;
136
137
}
137
138
138
- if ( _ . isEmpty ( foundUsers ) ) {
139
- return callback ( null , { available : true } ) ;
139
+ if ( totalCount ) {
140
+ return callback ( null , { available : false } ) ;
140
141
}
141
142
142
- return callback ( null , { available : false } ) ;
143
+ return callback ( null , { available : true } ) ;
143
144
} ) ;
144
145
}
145
146
146
- function getFromUsername ( username , cbk ) {
147
- if ( ! username ) {
148
- return cbk ( { err : 'invalid_username' } ) ;
149
- }
150
- const usernameRe = makeRegEx ( username ) ;
151
- usersCollection . find ( { username : usernameRe } , { password : 0 } , function ( err , users ) {
147
+ function findOne ( criteria , options , cbk ) {
148
+ usersCollection . find ( criteria , options || { } ) . limit ( 1 ) . next ( function ( err , user ) {
152
149
if ( err ) {
153
150
return cbk ( err ) ;
154
151
}
155
152
156
- users . nextObject ( function ( err , user ) {
157
- if ( err ) {
158
- return cbk ( err ) ;
159
- }
160
- if ( ! user ) {
161
- return cbk ( new Error ( ERROR_USER_NOT_FOUND ) ) ;
162
- }
163
- return cbk ( null , user ) ;
164
- } ) ;
153
+ if ( ! user ) {
154
+ return cbk ( new Error ( ERROR_USER_NOT_FOUND ) ) ;
155
+ }
156
+ return cbk ( null , user ) ;
165
157
} ) ;
166
158
}
167
159
168
- function getFromUsernamePassword ( username , password , cbk ) {
169
- const usernameRE = makeRegEx ( username ) ;
170
-
171
- usersCollection . find ( { username : usernameRE , password } , { password : 0 } , function ( err , users ) {
172
- if ( err ) {
173
- return cbk ( err , null ) ;
174
- }
160
+ function getFromUsername ( username , cbk ) {
161
+ if ( ! username ) {
162
+ return cbk ( { err : 'invalid_username' } ) ;
163
+ }
164
+ findOne ( { username : makeRegEx ( username ) } , { password : 0 } , cbk ) ;
165
+ }
175
166
176
- users . nextObject ( function ( nextErr , user ) {
177
- if ( nextErr ) {
178
- return cbk ( nextErr ) ;
179
- }
180
- if ( ! user ) {
181
- return cbk ( new Error ( ERROR_USER_NOT_FOUND ) , null ) ;
182
- }
183
- return cbk ( null , user ) ;
184
- } ) ;
185
- } ) ;
167
+ function getFromUsernamePassword ( username , password , cbk ) {
168
+ findOne ( { username : makeRegEx ( username ) , password } , { password : 0 } , cbk ) ;
186
169
}
187
170
188
171
function getAllUserFields ( username , cbk ) {
189
172
if ( ! username ) {
190
173
return cbk ( { err : 'invalid_username' } , null ) ;
191
174
}
192
- const usernameRE = makeRegEx ( username ) ;
193
- usersCollection . find ( { username : usernameRE } , function ( err , users ) {
194
- if ( err ) {
195
- return cbk ( err , null ) ;
196
- }
197
-
198
- users . nextObject ( function ( nextErr , user ) {
199
- if ( nextErr ) {
200
- return cbk ( nextErr ) ;
201
- }
202
- if ( ! user ) {
203
- return cbk ( new Error ( ERROR_USER_NOT_FOUND ) , null ) ;
204
- }
205
- return cbk ( null , user ) ;
206
- } ) ;
207
- } ) ;
175
+ findOne ( { username : makeRegEx ( username ) } , { } , cbk ) ;
208
176
}
209
177
210
178
function deleteAllUsers ( cbk ) {
211
- usersCollection . remove ( { } , function ( err ) {
179
+ usersCollection . deleteMany ( { } , function ( err ) {
212
180
return cbk ( err ) ;
213
181
} ) ;
214
182
}
215
183
216
184
function getFromId ( id , cbk ) {
217
- usersCollection . find ( { _id : id } , { password : 0 } , function ( err , users ) {
185
+ findOne ( { _id : id } , { password : 0 } , cbk ) ;
186
+ }
187
+
188
+ function updateFieldWithMethod ( userId , method , fieldName , fieldValue , cbk ) {
189
+ const data = {
190
+ [ method ] : {
191
+ [ fieldName ] : fieldValue
192
+ }
193
+ } ;
194
+
195
+ usersCollection . findOneAndUpdate ( { _id : userId } , data , { returnOriginal : false , projection : { password : 0 } } , function ( err , updatedProfiles ) {
218
196
if ( err ) {
219
197
return cbk ( err , null ) ;
220
198
}
221
-
222
- users . nextObject ( function ( err , user ) {
223
- if ( err ) {
224
- return cbk ( err ) ;
225
- }
226
- if ( ! user ) {
227
- return cbk ( new Error ( ERROR_USER_NOT_FOUND ) , null ) ;
228
- }
229
- if ( user . _id === id ) {
230
- return cbk ( null , user ) ;
231
- }
232
- } ) ;
199
+ return cbk ( null , updatedProfiles ) ;
233
200
} ) ;
234
201
}
235
202
203
+ function removeFromArrayFieldById ( userId , fieldName , fieldValue , cbk ) {
204
+ updateFieldWithMethod ( userId , '$pull' , fieldName , fieldValue , cbk ) ;
205
+ }
206
+
236
207
function addToArrayFieldById ( userId , fieldName , fieldValue , cbk ) {
237
- const _id = new ObjectID ( userId ) ;
238
208
239
209
const data = {
240
210
$push : {
@@ -243,32 +213,22 @@ function addToArrayFieldById(userId, fieldName, fieldValue, cbk) {
243
213
}
244
214
}
245
215
} ;
246
- usersCollection . update ( { _id } , data , function ( err , updatedProfiles ) {
216
+ usersCollection . findOneAndUpdate ( { _id : userId } , data , { returnOriginal : false , projection : { password : 0 } } , function ( err ) {
247
217
if ( err ) {
248
218
return cbk ( err , null ) ;
249
219
}
250
- return cbk ( null , updatedProfiles ) ;
220
+ return cbk ( null , 1 ) ;
251
221
} ) ;
252
222
}
253
223
254
224
function updateField ( userId , fieldName , fieldValue , cbk ) {
255
- const data = {
256
- $set : {
257
- [ fieldName ] : fieldValue
258
- }
259
- } ;
260
-
261
- usersCollection . update ( { _id : userId } , data , function ( err , updatedUsers ) {
262
- if ( err ) {
263
- return cbk ( err , null ) ;
264
- }
265
- return cbk ( null , updatedUsers ) ;
266
- } ) ;
225
+ updateFieldWithMethod ( userId , '$set' , fieldName , fieldValue , cbk ) ;
267
226
}
268
227
269
228
function updateArrayItem ( userId , arrayName , itemKey , itemValue , cbk ) {
229
+ const _id = userId ;
270
230
const query = {
271
- _id : userId ,
231
+ _id,
272
232
[ `${ arrayName } .${ itemKey } ` ] : itemValue [ itemKey ]
273
233
} ;
274
234
@@ -279,38 +239,55 @@ function updateArrayItem(userId, arrayName, itemKey, itemValue, cbk) {
279
239
} ;
280
240
281
241
// first tries to update array item if already exists
282
- usersCollection . update ( query , update , function ( err , updatedUsers ) {
242
+ usersCollection . updateOne ( query , update , function ( err , updateResult ) {
283
243
if ( err ) {
284
244
return cbk ( err , null ) ;
285
245
}
286
246
287
- if ( updatedUsers === 0 ) {
247
+ if ( updateResult . modifiedCount === 0 ) {
288
248
const update = {
289
249
$push : {
290
250
[ arrayName ] : itemValue
291
251
}
292
252
} ;
293
253
294
- usersCollection . update ( { _id : userId } , update , function ( err , updatedUsers ) {
254
+ usersCollection . updateOne ( { _id } , update , function ( err , updateResult ) {
295
255
if ( err ) {
296
256
return cbk ( err , null ) ;
297
257
}
298
- return cbk ( null , updatedUsers ) ;
258
+ return cbk ( null , updateResult . modifiedCount ) ;
299
259
} ) ;
300
260
return ;
301
261
}
302
262
303
- return cbk ( null , updatedUsers ) ;
263
+ return cbk ( null , updateResult . modifiedCount ) ;
304
264
} ) ;
305
265
}
306
266
307
267
function addRealm ( realmToAdd , cbk ) {
308
- realmsCollection . insert ( realmToAdd , function ( err , result ) {
268
+ realmsCollection . insertOne ( realmToAdd , function ( err , result ) {
309
269
if ( err ) {
310
270
return cbk ( err , null ) ;
311
271
}
312
272
313
- return cbk ( null , result [ 0 ] ) ;
273
+ return cbk ( null , result ) ;
274
+ } ) ;
275
+ }
276
+
277
+ function getRealmFromName ( name , cbk ) {
278
+ if ( ! name ) {
279
+ return cbk ( { err : 'invalid_realm_name' , code : 400 } ) ;
280
+ }
281
+ const nameRe = makeRegEx ( name ) ;
282
+ realmsCollection . find ( { name : nameRe } , { _id : 0 } ) . limit ( 1 ) . next ( function ( err , realm ) {
283
+ if ( err ) {
284
+ return cbk ( err ) ;
285
+ }
286
+
287
+ if ( ! realm ) {
288
+ return cbk ( { err : 'realm_not_found' , code : 400 } ) ;
289
+ }
290
+ return cbk ( null , realm ) ;
314
291
} ) ;
315
292
}
316
293
@@ -339,7 +316,7 @@ function resetRealmsVariables() {
339
316
}
340
317
341
318
function deleteAllRealms ( cbk ) {
342
- realmsCollection . remove ( { } , function ( err ) {
319
+ realmsCollection . deleteMany ( { } , function ( err ) {
343
320
return cbk ( err ) ;
344
321
} ) ;
345
322
}
@@ -348,7 +325,7 @@ function getStatus(cbk) {
348
325
if ( ! db || ! usersCollection ) {
349
326
return cbk ( MONGO_ERR ) ;
350
327
}
351
- usersCollection . count ( function ( err ) {
328
+ usersCollection . count ( { } , function ( err ) {
352
329
if ( err ) {
353
330
return cbk ( MONGO_ERR ) ;
354
331
}
@@ -367,15 +344,18 @@ module.exports = {
367
344
getFromId,
368
345
369
346
updateField,
347
+ updateFieldWithMethod,
370
348
updateArrayItem,
371
349
addToArrayFieldById,
350
+ removeFromArrayFieldById,
372
351
getAllUserFields,
373
352
374
353
ERROR_USER_NOT_FOUND ,
375
354
ERROR_USERNAME_ALREADY_EXISTS ,
376
355
377
356
addRealm,
378
357
getRealms,
358
+ getRealmFromName,
379
359
resetRealmsVariables,
380
360
deleteAllRealms,
381
361
findByEmail,
0 commit comments