Skip to content

Commit 58a0e6c

Browse files
author
Hage Yaapa
committedMay 30, 2019
fix: disallow queries in username and email fields
Username and email fields should not allow queries.
1 parent e682914 commit 58a0e6c

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed
 

‎common/models/user.js

+27-6
Original file line numberDiff line numberDiff line change
@@ -232,12 +232,20 @@ module.exports = function(User) {
232232
var query = self.normalizeCredentials(credentials, realmRequired,
233233
realmDelimiter);
234234

235-
if (realmRequired && !query.realm) {
236-
var err1 = new Error(g.f('{{realm}} is required'));
237-
err1.statusCode = 400;
238-
err1.code = 'REALM_REQUIRED';
239-
fn(err1);
240-
return fn.promise;
235+
if (realmRequired) {
236+
if (!query.realm) {
237+
var err1 = new Error(g.f('{{realm}} is required'));
238+
err1.statusCode = 400;
239+
err1.code = 'REALM_REQUIRED';
240+
fn(err1);
241+
return fn.promise;
242+
} else if (typeof query.realm !== 'string') {
243+
var err5 = new Error(g.f('Invalid realm'));
244+
err5.statusCode = 400;
245+
err5.code = 'INVALID_REALM';
246+
fn(err5);
247+
return fn.promise;
248+
}
241249
}
242250
if (!query.email && !query.username) {
243251
var err2 = new Error(g.f('{{username}} or {{email}} is required'));
@@ -246,6 +254,19 @@ module.exports = function(User) {
246254
fn(err2);
247255
return fn.promise;
248256
}
257+
if (query.username && typeof query.username !== 'string') {
258+
var err3 = new Error(g.f('Invalid username'));
259+
err3.statusCode = 400;
260+
err3.code = 'INVALID_USERNAME';
261+
fn(err3);
262+
return fn.promise;
263+
} else if (query.email && typeof query.email !== 'string') {
264+
var err4 = new Error(g.f('Invalid email'));
265+
err4.statusCode = 400;
266+
err4.code = 'INVALID_EMAIL';
267+
fn(err4);
268+
return fn.promise;
269+
}
249270

250271
self.findOne({where: query}, function(err, user) {
251272
var defaultError = new Error(g.f('login failed'));

‎test/user.test.js

+31
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,37 @@ describe('User', function() {
652652
});
653653
});
654654

655+
it('should not allow queries in email field', function(done) {
656+
User.login({email: {'neq': 'x'}, password: 'x'}, function(err, accessToken) {
657+
assert(err);
658+
assert.equal(err.code, 'INVALID_EMAIL');
659+
assert(!accessToken);
660+
661+
done();
662+
});
663+
});
664+
665+
it('should not allow queries in username field', function(done) {
666+
User.login({username: {'neq': 'x'}, password: 'x'}, function(err, accessToken) {
667+
assert(err);
668+
assert.equal(err.code, 'INVALID_USERNAME');
669+
assert(!accessToken);
670+
671+
done();
672+
});
673+
});
674+
675+
it('should not allow queries in realm field', function(done) {
676+
User.settings.realmRequired = true;
677+
User.login({username: 'x', password: 'x', realm: {'neq': 'x'}}, function(err, accessToken) {
678+
assert(err);
679+
assert.equal(err.code, 'INVALID_REALM');
680+
assert(!accessToken);
681+
682+
done();
683+
});
684+
});
685+
655686
it('Login a user by providing credentials with TTL', function(done) {
656687
User.login(validCredentialsWithTTL, function(err, accessToken) {
657688
assertGoodToken(accessToken, validCredentialsUser);

0 commit comments

Comments
 (0)
Please sign in to comment.