Skip to content

Commit ac6a5a8

Browse files
committed
[#1317] Add options param to User model funcs
1 parent c12f0cd commit ac6a5a8

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

server/config/passport.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ passport.use(new GitHubStrategy({
114114
existingEmailUser.save(saveErr => done(null, existingEmailUser));
115115
} else {
116116
let { username } = profile;
117-
User.findByUsername(username, true, (findByUsernameErr, existingUsernameUser) => {
117+
User.findByUsername(username, { caseInsensitive: true }, (findByUsernameErr, existingUsernameUser) => {
118118
if (existingUsernameUser) {
119119
username = generateUniqueUsername(username);
120120
}
@@ -152,7 +152,7 @@ passport.use(new GoogleStrategy({
152152

153153
User.findByEmail(primaryEmail, (findByEmailErr, existingEmailUser) => {
154154
let username = profile._json.emails[0].value.split('@')[0];
155-
User.findByUsername(username, true, (findByUsernameErr, existingUsernameUser) => {
155+
User.findByUsername(username, { caseInsensitive: true }, (findByUsernameErr, existingUsernameUser) => {
156156
if (existingUsernameUser) {
157157
username = generateUniqueUsername(username);
158158
}

server/controllers/user.controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export function createUser(req, res, next) {
9595
export function duplicateUserCheck(req, res) {
9696
const checkType = req.query.check_type;
9797
const value = req.query[checkType];
98-
User.findByEmailOrUsername(value, true, (err, user) => {
98+
User.findByEmailOrUsername(value, { caseInsensitive: true }, (err, user) => {
9999
if (user) {
100100
return res.json({
101101
exists: true,

server/models/user.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -171,19 +171,21 @@ userSchema.statics.findByEmail = function findByEmail(email, cb) {
171171
* Queries User collection by username and returns one User document.
172172
*
173173
* @param {string} username - Username string
174-
* @param {boolean} [caseInsensitive] - Does a caseInsensitive query, defaults to false
174+
* @param {Object} [options] - Optional options
175+
* @param {boolean} options.caseInsensitive - Does a caseInsensitive query, defaults to false
175176
* @callback [cb] - Optional error-first callback that passes User document
176177
* @return {Promise<Object>} - Returns Promise fulfilled by User document
177178
*/
178-
userSchema.statics.findByUsername = function findByUsername(username, caseInsensitive, cb) {
179+
userSchema.statics.findByUsername = function findByUsername(username, options, cb) {
179180
const query = {
180181
username
181182
};
182-
if (arguments.length === 3
183-
|| (arguments.length === 2 && typeof caseInsensitive === 'boolean' && caseInsensitive)) {
183+
if ((arguments.length === 3 && options.caseInsensitive)
184+
|| (arguments.length === 2 && typeof options === 'object' && options.caseInsensitive)) {
184185
return this.findOne(query).collation({ locale: 'en', strength: 2 }).exec(cb);
185186
}
186-
return this.findOne(query, cb || caseInsensitive);
187+
const callback = typeof options === 'function' ? options : cb;
188+
return this.findOne(query, callback);
187189
};
188190

189191
/**
@@ -193,23 +195,26 @@ userSchema.statics.findByUsername = function findByUsername(username, caseInsens
193195
* a username or email.
194196
*
195197
* @param {string} value - Email or username
196-
* @param {boolean} caseInsensitive - Does a caseInsensitive query rather than
197-
* default query for username or email, defaults
198-
* to false
198+
* @param {Object} [options] - Optional options
199+
* @param {boolean} options.caseInsensitive - Does a caseInsensitive query rather than
200+
* default query for username or email, defaults
201+
* to false
199202
* @callback [cb] - Optional error-first callback that passes User document
200203
* @return {Promise<Object>} - Returns Promise fulfilled by User document
201204
*/
202-
userSchema.statics.findByEmailOrUsername = function findByEmailOrUsername(value, caseInsensitive, cb) {
205+
userSchema.statics.findByEmailOrUsername = function findByEmailOrUsername(value, options, cb) {
206+
// do the case insensitive stuff
203207
const isEmail = value.indexOf('@') > -1;
204-
if (arguments.length === 3
205-
|| (arguments.length === 2 && typeof caseInsensitive === 'boolean' && caseInsensitive)) {
208+
if ((arguments.length === 3 && options.caseInsensitive)
209+
|| (arguments.length === 2 && typeof options === 'object' && options.caseInsensitive)) {
206210
const query = isEmail ? { email: value } : { username: value };
207211
return this.findOne(query).collation({ locale: 'en', strength: 2 }).exec(cb);
208212
}
213+
const callback = typeof options === 'function' ? options : cb;
209214
if (isEmail) {
210-
return this.findByEmail(value, cb || caseInsensitive);
215+
return this.findByEmail(value, callback);
211216
}
212-
return this.findByUsername(value, cb || caseInsensitive);
217+
return this.findByUsername(value, callback);
213218
};
214219

215220
/**

0 commit comments

Comments
 (0)