Skip to content

Commit

Permalink
Merge pull request #103 from thegameofcode/pr-99-100-102
Browse files Browse the repository at this point in the history
Merged #99 #100 #102
  • Loading branch information
luismesas committed Mar 28, 2016
2 parents 585c4d5 + 6c83c0c commit 56ccbd0
Show file tree
Hide file tree
Showing 99 changed files with 776 additions and 328 deletions.
4 changes: 3 additions & 1 deletion .codeclimate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ engines:
ratings:
paths:
- "src/**.js"
exclude_paths: []
exclude_paths:
- tests-unit/**/*
- tests-acceptance/**/*
3 changes: 3 additions & 0 deletions config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
'use strict';

module.exports = require('./config.json');
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"http-proxy": "^1.8.1",
"jsonschema": "^1.0.0",
"lodash": "^4.3.0",
"mongodb": "^1.4.40",
"mongodb": "^2.1.7",
"passport": "^0.3.2",
"passport-forcedotcom": "^0.1.1",
"passport-google-oauth2": "^0.1.6",
Expand Down
188 changes: 77 additions & 111 deletions src/managers/dao.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
const assert = require('assert');
const async = require('async');
const escapeRegexp = require('escape-regexp');
const config = require('../../config.json');
const config = require('../../config');
const MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID;
const _ = require('lodash');

const TIME_TO_REFRESH = 1000 * 60 * 60;
Expand Down Expand Up @@ -96,12 +95,14 @@ function addUser(userToAdd, cbk) {
user.roles = ['user'];
}

return usersCollection.insert(user, function (err, result) {
return usersCollection.insertOne(user, function (err, insertResult) {
if (err) {
return cbk(err, null);
}

return cbk(null, result[0]);
user._id = insertResult.insertedId;

return cbk(null, user);
});
}
return cbk(err);
Expand All @@ -123,7 +124,7 @@ function findByEmail(email, callback) {

const targetEmail = makeRegEx(email);

usersCollection.find({username: targetEmail}, {password: 0}).toArray(function (error, foundUsers) {
usersCollection.count({username: targetEmail}, function (error, totalCount) {

if (error) {
return callback({
Expand All @@ -135,135 +136,89 @@ function findByEmail(email, callback) {
});
}

if (_.isEmpty(foundUsers)) {
return callback(null, {available: true});
if (totalCount) {
return callback(null, {available: false});
}

return callback(null, {available: false});
return callback(null, {available: true});
});
}

function getFromUsername(username, cbk) {
if (!username) {
return cbk({err: 'invalid_username'});
}
const usernameRe = makeRegEx(username);
usersCollection.find({ username: usernameRe }, {password: 0}, function (err, users) {
function findOneUser(criteria, options, cbk) {
usersCollection.find(criteria, options || {}).limit(1).next(function (err, user) {
if (err) {
return cbk(err);
}

users.nextObject(function (err, user) {
if (err) {
return cbk(err);
}
if (!user) {
return cbk(new Error(ERROR_USER_NOT_FOUND));
}
return cbk(null, user);
});
if (!user) {
return cbk(new Error(ERROR_USER_NOT_FOUND));
}
return cbk(null, user);
});
}

function getFromUsernamePassword(username, password, cbk) {
const usernameRE = makeRegEx(username);
function updateOne(coll, criteria, update, cbk) {

usersCollection.find({ username: usernameRE, password }, {password: 0}, function (err, users) {
coll.updateOne(criteria, update, function (err, res) {
if (err) {
return cbk(err, null);
}

users.nextObject(function (nextErr, user) {
if (nextErr) {
return cbk(nextErr);
}
if (!user) {
return cbk(new Error(ERROR_USER_NOT_FOUND), null);
}
return cbk(null, user);
});
return cbk(null, res.modifiedCount);
});
}

function getFromUsername(username, cbk) {
if (!username) {
return cbk({err: 'invalid_username'});
}
findOneUser({ username: makeRegEx(username) }, {password: 0}, cbk);
}

function getFromUsernamePassword(username, password, cbk) {
findOneUser({ username: makeRegEx(username), password }, {password: 0}, cbk);
}

function getAllUserFields(username, cbk) {
if (!username) {
return cbk({err: 'invalid_username'}, null);
}
const usernameRE = makeRegEx(username);
usersCollection.find({ username: usernameRE }, function (err, users) {
if (err) {
return cbk(err, null);
}

users.nextObject(function (nextErr, user) {
if (nextErr) {
return cbk(nextErr);
}
if (!user) {
return cbk(new Error(ERROR_USER_NOT_FOUND), null);
}
return cbk(null, user);
});
});
findOneUser({ username: makeRegEx(username) }, {}, cbk);
}

function deleteAllUsers(cbk) {
usersCollection.remove({}, function (err) {
usersCollection.deleteMany({}, function (err) {
return cbk(err);
});
}

function getFromId(id, cbk) {
usersCollection.find({_id: id}, {password: 0}, function (err, users) {
if (err) {
return cbk(err, null);
findOneUser({_id: id}, {password: 0}, cbk);
}

function updateFieldWithMethod(userId, method, fieldName, fieldValue, cbk){
updateOne(usersCollection, { _id: userId }, {
[method]: {
[fieldName]: fieldValue
}
}, cbk);
}

users.nextObject(function (err, user) {
if (err) {
return cbk(err);
}
if (!user) {
return cbk(new Error(ERROR_USER_NOT_FOUND), null);
}
if (user._id === id) {
return cbk(null, user);
}
});
});
function removeFromArrayFieldById(userId, fieldName, fieldValue, cbk) {
updateFieldWithMethod(userId, '$pull', fieldName, fieldValue, cbk);
}

function addToArrayFieldById(userId, fieldName, fieldValue, cbk) {
const _id = new ObjectID(userId);

const data = {
updateOne(usersCollection, { _id: userId }, {
$push: {
[fieldName]: {
$each: [fieldValue]
}
}
};
usersCollection.update({ _id }, data, function (err, updatedProfiles) {
if (err) {
return cbk(err, null);
}
return cbk(null, updatedProfiles);
});
}, cbk);
}

function updateField(userId, fieldName, fieldValue, cbk) {
const data = {
$set: {
[fieldName]: fieldValue
}
};

usersCollection.update({_id: userId}, data, function (err, updatedUsers) {
if (err) {
return cbk(err, null);
}
return cbk(null, updatedUsers);
});
updateFieldWithMethod(userId, '$set', fieldName, fieldValue, cbk);
}

function updateArrayItem(userId, arrayName, itemKey, itemValue, cbk) {
Expand All @@ -279,38 +234,46 @@ function updateArrayItem(userId, arrayName, itemKey, itemValue, cbk) {
};

// first tries to update array item if already exists
usersCollection.update(query, update, function (err, updatedUsers) {
usersCollection.updateOne(query, update, function (err, updateResult) {
if (err) {
return cbk(err, null);
}

if (updatedUsers === 0) {
const update = {
$push: {
[arrayName]: itemValue
}
};

usersCollection.update({_id: userId}, update, function (err, updatedUsers) {
if (err) {
return cbk(err, null);
}
return cbk(null, updatedUsers);
});
return;
if (updateResult.modifiedCount !== 0) {
return cbk(null, updateResult.modifiedCount);
}

return cbk(null, updatedUsers);
updateOne(usersCollection, { _id: userId }, {
$push: {
[arrayName]: itemValue
}
}, cbk);
});
}

function addRealm(realmToAdd, cbk) {
realmsCollection.insert(realmToAdd, function (err, result) {
realmsCollection.insertOne(realmToAdd, function (err, result) {
if (err) {
return cbk(err, null);
}

return cbk(null, result[0]);
return cbk(null, result);
});
}

function getRealmFromName(name, cbk) {
if (!name) {
return cbk({err: 'invalid_realm_name', code: 400});
}
const nameRe = makeRegEx(name);
realmsCollection.find({name: nameRe}, {_id: 0}).limit(1).next(function (err, realm) {
if (err) {
return cbk(err);
}

if (!realm) {
return cbk({err: 'realm_not_found', code: 400});
}
return cbk(null, realm);
});
}

Expand Down Expand Up @@ -339,7 +302,7 @@ function resetRealmsVariables() {
}

function deleteAllRealms(cbk) {
realmsCollection.remove({}, function (err) {
realmsCollection.deleteMany({}, function (err) {
return cbk(err);
});
}
Expand All @@ -348,7 +311,7 @@ function getStatus(cbk) {
if (!db || !usersCollection) {
return cbk(MONGO_ERR);
}
usersCollection.count(function (err) {
usersCollection.count({}, function (err) {
if (err) {
return cbk(MONGO_ERR);
}
Expand All @@ -367,15 +330,18 @@ module.exports = {
getFromId,

updateField,
updateFieldWithMethod,
updateArrayItem,
addToArrayFieldById,
removeFromArrayFieldById,
getAllUserFields,

ERROR_USER_NOT_FOUND,
ERROR_USERNAME_ALREADY_EXISTS,

addRealm,
getRealms,
getRealmFromName,
resetRealmsVariables,
deleteAllRealms,
findByEmail,
Expand Down
2 changes: 1 addition & 1 deletion src/managers/email.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ function sendEmailMagicLink(email, link, cbk){
}

module.exports = function (settings) {
const config = require('../../config.json');
const config = require('../../config');
_settings = Object.assign({}, config, settings);

return {
Expand Down
2 changes: 1 addition & 1 deletion src/managers/file_store.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const AWS = require('aws-sdk');
const https = require('https');
const config = require('../../config.json');
const config = require('../../config');

let s3;

Expand Down
2 changes: 1 addition & 1 deletion src/managers/phone.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ function verifyPhone(redisKeyId, phone, country, pin, cbk) {
}

module.exports = function (settings) {
const config = require('../../config.json');
const config = require('../../config');
_settings = _.assign({}, config, settings);

return {
Expand Down
2 changes: 1 addition & 1 deletion src/managers/redis.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

const redis = require('redis');
const config = require('../../config.json');
const config = require('../../config');

const REDIS_HOST = config.redis.host || 'localhost';
const REDIS_PORT = config.redis.port || 6379;
Expand Down
2 changes: 1 addition & 1 deletion src/managers/token.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
const async = require('async');
const isFunction = require('lodash/isFunction');
const ciphertoken = require('ciphertoken');
const config = require('../../config.json');
const config = require('../../config');

const accessTokenSettings = {
cipherKey: config.accessToken.cipherKey,
Expand Down
Loading

0 comments on commit 56ccbd0

Please sign in to comment.