Skip to content

Commit 56ccbd0

Browse files
committed
Merge pull request #103 from thegameofcode/pr-99-100-102
Merged #99 #100 #102
2 parents 585c4d5 + 6c83c0c commit 56ccbd0

File tree

99 files changed

+776
-328
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+776
-328
lines changed

.codeclimate.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ engines:
1111
ratings:
1212
paths:
1313
- "src/**.js"
14-
exclude_paths: []
14+
exclude_paths:
15+
- tests-unit/**/*
16+
- tests-acceptance/**/*

config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'use strict';
2+
3+
module.exports = require('./config.json');

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"http-proxy": "^1.8.1",
3030
"jsonschema": "^1.0.0",
3131
"lodash": "^4.3.0",
32-
"mongodb": "^1.4.40",
32+
"mongodb": "^2.1.7",
3333
"passport": "^0.3.2",
3434
"passport-forcedotcom": "^0.1.1",
3535
"passport-google-oauth2": "^0.1.6",

src/managers/dao.js

Lines changed: 77 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
const assert = require('assert');
44
const async = require('async');
55
const escapeRegexp = require('escape-regexp');
6-
const config = require('../../config.json');
6+
const config = require('../../config');
77
const MongoClient = require('mongodb').MongoClient;
8-
const ObjectID = require('mongodb').ObjectID;
98
const _ = require('lodash');
109

1110
const 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+
188181
function 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

210188
function deleteAllUsers(cbk) {
211-
usersCollection.remove({}, function (err) {
189+
usersCollection.deleteMany({}, function (err) {
212190
return cbk(err);
213191
});
214192
}
215193

216194
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
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

236210
function 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

254220
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);
267222
}
268223

269224
function 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

307253
function 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

341304
function 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,

src/managers/email.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ function sendEmailMagicLink(email, link, cbk){
156156
}
157157

158158
module.exports = function (settings) {
159-
const config = require('../../config.json');
159+
const config = require('../../config');
160160
_settings = Object.assign({}, config, settings);
161161

162162
return {

src/managers/file_store.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
const AWS = require('aws-sdk');
44
const https = require('https');
5-
const config = require('../../config.json');
5+
const config = require('../../config');
66

77
let s3;
88

src/managers/phone.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ function verifyPhone(redisKeyId, phone, country, pin, cbk) {
154154
}
155155

156156
module.exports = function (settings) {
157-
const config = require('../../config.json');
157+
const config = require('../../config');
158158
_settings = _.assign({}, config, settings);
159159

160160
return {

src/managers/redis.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const redis = require('redis');
4-
const config = require('../../config.json');
4+
const config = require('../../config');
55

66
const REDIS_HOST = config.redis.host || 'localhost';
77
const REDIS_PORT = config.redis.port || 6379;

src/managers/token.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const async = require('async');
44
const isFunction = require('lodash/isFunction');
55
const ciphertoken = require('ciphertoken');
6-
const config = require('../../config.json');
6+
const config = require('../../config');
77

88
const accessTokenSettings = {
99
cipherKey: config.accessToken.cipherKey,

0 commit comments

Comments
 (0)