33const assert = require ( 'assert' ) ;
44const async = require ( 'async' ) ;
55const escapeRegexp = require ( 'escape-regexp' ) ;
6- const config = require ( '../../config.json ' ) ;
6+ const config = require ( '../../config' ) ;
77const MongoClient = require ( 'mongodb' ) . MongoClient ;
8- const ObjectID = require ( 'mongodb' ) . ObjectID ;
98const _ = require ( 'lodash' ) ;
109
1110const TIME_TO_REFRESH = 1000 * 60 * 60 ;
@@ -96,12 +95,14 @@ function addUser(userToAdd, cbk) {
9695 user . roles = [ 'user' ] ;
9796 }
9897
99- return usersCollection . insert ( user , function ( err , result ) {
98+ return usersCollection . insertOne ( user , function ( err , insertResult ) {
10099 if ( err ) {
101100 return cbk ( err , null ) ;
102101 }
103102
104- return cbk ( null , result [ 0 ] ) ;
103+ user . _id = insertResult . insertedId ;
104+
105+ return cbk ( null , user ) ;
105106 } ) ;
106107 }
107108 return cbk ( err ) ;
@@ -123,7 +124,7 @@ function findByEmail(email, callback) {
123124
124125 const targetEmail = makeRegEx ( email ) ;
125126
126- usersCollection . find ( { username : targetEmail } , { password : 0 } ) . toArray ( function ( error , foundUsers ) {
127+ usersCollection . count ( { username : targetEmail } , function ( error , totalCount ) {
127128
128129 if ( error ) {
129130 return callback ( {
@@ -135,135 +136,89 @@ function findByEmail(email, callback) {
135136 } ) ;
136137 }
137138
138- if ( _ . isEmpty ( foundUsers ) ) {
139- return callback ( null , { available : true } ) ;
139+ if ( totalCount ) {
140+ return callback ( null , { available : false } ) ;
140141 }
141142
142- return callback ( null , { available : false } ) ;
143+ return callback ( null , { available : true } ) ;
143144 } ) ;
144145}
145146
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 ) {
152149 if ( err ) {
153150 return cbk ( err ) ;
154151 }
155152
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 ) ;
165157 } ) ;
166158}
167159
168- function getFromUsernamePassword ( username , password , cbk ) {
169- const usernameRE = makeRegEx ( username ) ;
160+ function updateOne ( coll , criteria , update , cbk ) {
170161
171- usersCollection . find ( { username : usernameRE , password } , { password : 0 } , function ( err , users ) {
162+ coll . updateOne ( criteria , update , function ( err , res ) {
172163 if ( err ) {
173164 return cbk ( err , null ) ;
174165 }
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 ) ;
185167 } ) ;
186168}
187169
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+
188181function getAllUserFields ( username , cbk ) {
189182 if ( ! username ) {
190183 return cbk ( { err : 'invalid_username' } , null ) ;
191184 }
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 ) ;
208186}
209187
210188function deleteAllUsers ( cbk ) {
211- usersCollection . remove ( { } , function ( err ) {
189+ usersCollection . deleteMany ( { } , function ( err ) {
212190 return cbk ( err ) ;
213191 } ) ;
214192}
215193
216194function 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
220202 }
203+ } , cbk ) ;
204+ }
221205
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 ) ;
234208}
235209
236210function addToArrayFieldById ( userId , fieldName , fieldValue , cbk ) {
237- const _id = new ObjectID ( userId ) ;
238-
239- const data = {
211+ updateOne ( usersCollection , { _id : userId } , {
240212 $push : {
241213 [ fieldName ] : {
242214 $each : [ fieldValue ]
243215 }
244216 }
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 ) ;
252218}
253219
254220function 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 ) ;
267222}
268223
269224function updateArrayItem ( userId , arrayName , itemKey , itemValue , cbk ) {
@@ -279,38 +234,46 @@ function updateArrayItem(userId, arrayName, itemKey, itemValue, cbk) {
279234 } ;
280235
281236 // 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 ) {
283238 if ( err ) {
284239 return cbk ( err , null ) ;
285240 }
286241
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 ) ;
301244 }
302-
303- return cbk ( null , updatedUsers ) ;
245+ updateOne ( usersCollection , { _id : userId } , {
246+ $push : {
247+ [ arrayName ] : itemValue
248+ }
249+ } , cbk ) ;
304250 } ) ;
305251}
306252
307253function addRealm ( realmToAdd , cbk ) {
308- realmsCollection . insert ( realmToAdd , function ( err , result ) {
254+ realmsCollection . insertOne ( realmToAdd , function ( err , result ) {
309255 if ( err ) {
310256 return cbk ( err , null ) ;
311257 }
312258
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 ) ;
314277 } ) ;
315278}
316279
@@ -339,7 +302,7 @@ function resetRealmsVariables() {
339302}
340303
341304function deleteAllRealms ( cbk ) {
342- realmsCollection . remove ( { } , function ( err ) {
305+ realmsCollection . deleteMany ( { } , function ( err ) {
343306 return cbk ( err ) ;
344307 } ) ;
345308}
@@ -348,7 +311,7 @@ function getStatus(cbk) {
348311 if ( ! db || ! usersCollection ) {
349312 return cbk ( MONGO_ERR ) ;
350313 }
351- usersCollection . count ( function ( err ) {
314+ usersCollection . count ( { } , function ( err ) {
352315 if ( err ) {
353316 return cbk ( MONGO_ERR ) ;
354317 }
@@ -367,15 +330,18 @@ module.exports = {
367330 getFromId,
368331
369332 updateField,
333+ updateFieldWithMethod,
370334 updateArrayItem,
371335 addToArrayFieldById,
336+ removeFromArrayFieldById,
372337 getAllUserFields,
373338
374339 ERROR_USER_NOT_FOUND ,
375340 ERROR_USERNAME_ALREADY_EXISTS ,
376341
377342 addRealm,
378343 getRealms,
344+ getRealmFromName,
379345 resetRealmsVariables,
380346 deleteAllRealms,
381347 findByEmail,
0 commit comments