Merge pull request #2980 from fullcube/bb/password-reset-realms
Allow password reset request for users in realms
This commit is contained in:
commit
1fa785f66f
|
@ -546,11 +546,12 @@ module.exports = function(User) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a short lived acess token for temporary login. Allows users
|
* Create a short lived access token for temporary login. Allows users
|
||||||
* to change passwords if forgotten.
|
* to change passwords if forgotten.
|
||||||
*
|
*
|
||||||
* @options {Object} options
|
* @options {Object} options
|
||||||
* @prop {String} email The user's email address
|
* @property {String} email The user's email address
|
||||||
|
* @property {String} realm The user's realm (optional)
|
||||||
* @callback {Function} callback
|
* @callback {Function} callback
|
||||||
* @param {Error} err
|
* @param {Error} err
|
||||||
*/
|
*/
|
||||||
|
@ -575,7 +576,13 @@ module.exports = function(User) {
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return cb(err);
|
return cb(err);
|
||||||
}
|
}
|
||||||
UserModel.findOne({ where: { email: options.email }}, function(err, user) {
|
var where = {
|
||||||
|
email: options.email
|
||||||
|
};
|
||||||
|
if (options.realm) {
|
||||||
|
where.realm = options.realm;
|
||||||
|
}
|
||||||
|
UserModel.findOne({ where: where }, function(err, user) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return cb(err);
|
return cb(err);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ describe('User', function() {
|
||||||
var validCredentials = {email: validCredentialsEmail, password: 'bar'};
|
var validCredentials = {email: validCredentialsEmail, password: 'bar'};
|
||||||
var validCredentialsEmailVerified = {email: 'foo1@bar.com', password: 'bar1', emailVerified: true};
|
var validCredentialsEmailVerified = {email: 'foo1@bar.com', password: 'bar1', emailVerified: true};
|
||||||
var validCredentialsEmailVerifiedOverREST = {email: 'foo2@bar.com', password: 'bar2', emailVerified: true};
|
var validCredentialsEmailVerifiedOverREST = {email: 'foo2@bar.com', password: 'bar2', emailVerified: true};
|
||||||
|
var validCredentialsWithRealm = {email: 'foo3@bar.com', password: 'bar', realm: 'foobar'};
|
||||||
var validCredentialsWithTTL = {email: 'foo@bar.com', password: 'bar', ttl: 3600};
|
var validCredentialsWithTTL = {email: 'foo@bar.com', password: 'bar', ttl: 3600};
|
||||||
var validCredentialsWithTTLAndScope = {email: 'foo@bar.com', password: 'bar', ttl: 3600, scope: 'all'};
|
var validCredentialsWithTTLAndScope = {email: 'foo@bar.com', password: 'bar', ttl: 3600, scope: 'all'};
|
||||||
var validMixedCaseEmailCredentials = {email: 'Foo@bar.com', password: 'bar'};
|
var validMixedCaseEmailCredentials = {email: 'Foo@bar.com', password: 'bar'};
|
||||||
|
@ -1878,6 +1879,58 @@ describe('User', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('User.resetPassword(options, cb) requiring realm', function() {
|
||||||
|
var realmUser;
|
||||||
|
|
||||||
|
beforeEach(function(done) {
|
||||||
|
User.create(validCredentialsWithRealm, function(err, u) {
|
||||||
|
if (err) return done(err);
|
||||||
|
|
||||||
|
realmUser = u;
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Reports when email is not found in realm', function(done) {
|
||||||
|
User.resetPassword({
|
||||||
|
email: realmUser.email,
|
||||||
|
realm: 'unknown'
|
||||||
|
}, function(err) {
|
||||||
|
assert(err);
|
||||||
|
assert.equal(err.code, 'EMAIL_NOT_FOUND');
|
||||||
|
assert.equal(err.statusCode, 404);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Creates a temp accessToken to allow a user in realm to change password', function(done) {
|
||||||
|
var calledBack = false;
|
||||||
|
|
||||||
|
User.resetPassword({
|
||||||
|
email: realmUser.email,
|
||||||
|
realm: realmUser.realm
|
||||||
|
}, function() {
|
||||||
|
calledBack = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
User.once('resetPasswordRequest', function(info) {
|
||||||
|
assert(info.email);
|
||||||
|
assert(info.accessToken);
|
||||||
|
assert(info.accessToken.id);
|
||||||
|
assert.equal(info.accessToken.ttl / 60, 15);
|
||||||
|
assert(calledBack);
|
||||||
|
info.accessToken.user(function(err, user) {
|
||||||
|
if (err) return done(err);
|
||||||
|
|
||||||
|
assert.equal(user.email, realmUser.email);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Email Update', function() {
|
describe('Email Update', function() {
|
||||||
|
|
Loading…
Reference in New Issue