3
3
const assert = require ( 'assert' ) ;
4
4
const async = require ( 'async' ) ;
5
5
const escapeRegexp = require ( 'escape-regexp' ) ;
6
- const config = require ( '../../config.json ' ) ;
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,135 +136,89 @@ 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 findOneUser ( 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 ) ;
160
+ function updateOne ( coll , criteria , update , cbk ) {
170
161
171
- usersCollection . find ( { username : usernameRE , password } , { password : 0 } , function ( err , users ) {
162
+ coll . updateOne ( criteria , update , function ( err , res ) {
172
163
if ( err ) {
173
164
return cbk ( err , null ) ;
174
165
}
175
-
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
- } ) ;
166
+ return cbk ( null , res . modifiedCount ) ;
185
167
} ) ;
186
168
}
187
169
170
+ function getFromUsername ( username , cbk ) {
171
+ if ( ! username ) {
172
+ return cbk ( { err : 'invalid_username' } ) ;
173
+ }
174
+ findOneUser ( { username : makeRegEx ( username ) } , { password : 0 } , cbk ) ;
175
+ }
176
+
177
+ function getFromUsernamePassword ( username , password , cbk ) {
178
+ findOneUser ( { username : makeRegEx ( username ) , password } , { password : 0 } , cbk ) ;
179
+ }
180
+
188
181
function getAllUserFields ( username , cbk ) {
189
182
if ( ! username ) {
190
183
return cbk ( { err : 'invalid_username' } , null ) ;
191
184
}
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
- } ) ;
185
+ findOneUser ( { username : makeRegEx ( username ) } , { } , cbk ) ;
208
186
}
209
187
210
188
function deleteAllUsers ( cbk ) {
211
- usersCollection . remove ( { } , function ( err ) {
189
+ usersCollection . deleteMany ( { } , function ( err ) {
212
190
return cbk ( err ) ;
213
191
} ) ;
214
192
}
215
193
216
194
function getFromId ( id , cbk ) {
217
- usersCollection . find ( { _id : id } , { password : 0 } , function ( err , users ) {
218
- if ( err ) {
219
- return cbk ( err , null ) ;
195
+ findOneUser ( { _id : id } , { password : 0 } , cbk ) ;
196
+ }
197
+
198
+ function updateFieldWithMethod ( userId , method , fieldName , fieldValue , cbk ) {
199
+ updateOne ( usersCollection , { _id : userId } , {
200
+ [ method ] : {
201
+ [ fieldName ] : fieldValue
220
202
}
203
+ } , cbk ) ;
204
+ }
221
205
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
- } ) ;
233
- } ) ;
206
+ function removeFromArrayFieldById ( userId , fieldName , fieldValue , cbk ) {
207
+ updateFieldWithMethod ( userId , '$pull' , fieldName , fieldValue , cbk ) ;
234
208
}
235
209
236
210
function addToArrayFieldById ( userId , fieldName , fieldValue , cbk ) {
237
- const _id = new ObjectID ( userId ) ;
238
-
239
- const data = {
211
+ updateOne ( usersCollection , { _id : userId } , {
240
212
$push : {
241
213
[ fieldName ] : {
242
214
$each : [ fieldValue ]
243
215
}
244
216
}
245
- } ;
246
- usersCollection . update ( { _id } , data , function ( err , updatedProfiles ) {
247
- if ( err ) {
248
- return cbk ( err , null ) ;
249
- }
250
- return cbk ( null , updatedProfiles ) ;
251
- } ) ;
217
+ } , cbk ) ;
252
218
}
253
219
254
220
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
- } ) ;
221
+ updateFieldWithMethod ( userId , '$set' , fieldName , fieldValue , cbk ) ;
267
222
}
268
223
269
224
function updateArrayItem ( userId , arrayName , itemKey , itemValue , cbk ) {
@@ -279,38 +234,46 @@ function updateArrayItem(userId, arrayName, itemKey, itemValue, cbk) {
279
234
} ;
280
235
281
236
// first tries to update array item if already exists
282
- usersCollection . update ( query , update , function ( err , updatedUsers ) {
237
+ usersCollection . updateOne ( query , update , function ( err , updateResult ) {
283
238
if ( err ) {
284
239
return cbk ( err , null ) ;
285
240
}
286
241
287
- if ( updatedUsers === 0 ) {
288
- const update = {
289
- $push : {
290
- [ arrayName ] : itemValue
291
- }
292
- } ;
293
-
294
- usersCollection . update ( { _id : userId } , update , function ( err , updatedUsers ) {
295
- if ( err ) {
296
- return cbk ( err , null ) ;
297
- }
298
- return cbk ( null , updatedUsers ) ;
299
- } ) ;
300
- return ;
242
+ if ( updateResult . modifiedCount !== 0 ) {
243
+ return cbk ( null , updateResult . modifiedCount ) ;
301
244
}
302
-
303
- return cbk ( null , updatedUsers ) ;
245
+ updateOne ( usersCollection , { _id : userId } , {
246
+ $push : {
247
+ [ arrayName ] : itemValue
248
+ }
249
+ } , cbk ) ;
304
250
} ) ;
305
251
}
306
252
307
253
function addRealm ( realmToAdd , cbk ) {
308
- realmsCollection . insert ( realmToAdd , function ( err , result ) {
254
+ realmsCollection . insertOne ( realmToAdd , function ( err , result ) {
309
255
if ( err ) {
310
256
return cbk ( err , null ) ;
311
257
}
312
258
313
- return cbk ( null , result [ 0 ] ) ;
259
+ return cbk ( null , result ) ;
260
+ } ) ;
261
+ }
262
+
263
+ function getRealmFromName ( name , cbk ) {
264
+ if ( ! name ) {
265
+ return cbk ( { err : 'invalid_realm_name' , code : 400 } ) ;
266
+ }
267
+ const nameRe = makeRegEx ( name ) ;
268
+ realmsCollection . find ( { name : nameRe } , { _id : 0 } ) . limit ( 1 ) . next ( function ( err , realm ) {
269
+ if ( err ) {
270
+ return cbk ( err ) ;
271
+ }
272
+
273
+ if ( ! realm ) {
274
+ return cbk ( { err : 'realm_not_found' , code : 400 } ) ;
275
+ }
276
+ return cbk ( null , realm ) ;
314
277
} ) ;
315
278
}
316
279
@@ -339,7 +302,7 @@ function resetRealmsVariables() {
339
302
}
340
303
341
304
function deleteAllRealms ( cbk ) {
342
- realmsCollection . remove ( { } , function ( err ) {
305
+ realmsCollection . deleteMany ( { } , function ( err ) {
343
306
return cbk ( err ) ;
344
307
} ) ;
345
308
}
@@ -348,7 +311,7 @@ function getStatus(cbk) {
348
311
if ( ! db || ! usersCollection ) {
349
312
return cbk ( MONGO_ERR ) ;
350
313
}
351
- usersCollection . count ( function ( err ) {
314
+ usersCollection . count ( { } , function ( err ) {
352
315
if ( err ) {
353
316
return cbk ( MONGO_ERR ) ;
354
317
}
@@ -367,15 +330,18 @@ module.exports = {
367
330
getFromId,
368
331
369
332
updateField,
333
+ updateFieldWithMethod,
370
334
updateArrayItem,
371
335
addToArrayFieldById,
336
+ removeFromArrayFieldById,
372
337
getAllUserFields,
373
338
374
339
ERROR_USER_NOT_FOUND ,
375
340
ERROR_USERNAME_ALREADY_EXISTS ,
376
341
377
342
addRealm,
378
343
getRealms,
344
+ getRealmFromName,
379
345
resetRealmsVariables,
380
346
deleteAllRealms,
381
347
findByEmail,
0 commit comments