feature: change stored passphrase
This commit is contained in:
parent
1b647758f1
commit
f02e3ebe75
@ -58,6 +58,7 @@ module.exports = function(app) {
|
||||
app.post(apiPrefix + '/email/validate', emailPlugin.validate);
|
||||
app.get(apiPrefix + '/email/retrieve/:email', emailPlugin.get);
|
||||
app.get(apiPrefix + '/email/validate', emailPlugin.validate);
|
||||
app.post(apiPrefix + '/email/change_passphrase', emailPlugin.changePassphrase);
|
||||
}
|
||||
|
||||
// Address routes
|
||||
|
||||
@ -240,7 +240,13 @@ emailPlugin.checkPassphrase = function(email, passphrase, callback) {
|
||||
* @param {Function(err)} callback
|
||||
*/
|
||||
emailPlugin.savePassphrase = function(email, passphrase, callback) {
|
||||
emailPlugin.db.put(MAP_EMAIL_TO_SECRET + email, passphrase, callback);
|
||||
emailPlugin.db.put(MAP_EMAIL_TO_SECRET + email, passphrase, function(err) {
|
||||
if (err) {
|
||||
logger.error(err);
|
||||
return callback(emailPlugin.errors.INTERNAL_ERROR);
|
||||
}
|
||||
return callback(null);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
@ -324,7 +330,7 @@ emailPlugin.processPost = function(request, response, email, key, secret, record
|
||||
} else {
|
||||
emailPlugin.savePassphrase(email, secret, function(err) {
|
||||
if (err) {
|
||||
return callback({code: 500, message: err});
|
||||
return callback(err);
|
||||
}
|
||||
return callback();
|
||||
});
|
||||
@ -477,6 +483,44 @@ emailPlugin.validate = function (request, response) {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Changes an user's passphrase
|
||||
*
|
||||
* @param {Express.Request} request
|
||||
* @param {Express.Response} response
|
||||
*/
|
||||
emailPlugin.changePassphrase = function (request, response) {
|
||||
var queryData = '';
|
||||
|
||||
request.on('data', function (data) {
|
||||
queryData += data;
|
||||
if (queryData.length > MAX_ALLOWED_STORAGE) {
|
||||
queryData = '';
|
||||
response.writeHead(413, {'Content-Type': 'text/plain'}).end();
|
||||
request.connection.destroy();
|
||||
}
|
||||
}).on('end', function () {
|
||||
var params = querystring.parse(queryData);
|
||||
var email = params.email;
|
||||
var oldSecret = params.secret;
|
||||
var newSecret = params.newSecret;
|
||||
if (!email || !oldSecret || !newSecret) {
|
||||
return emailPlugin.returnError(emailPlugin.errors.INVALID_REQUEST, response);
|
||||
}
|
||||
emailPlugin.checkPassphrase(email, oldSecret, function (error) {
|
||||
if (error) {
|
||||
return emailPlugin.returnError(error, response);
|
||||
}
|
||||
emailPlugin.savePassphrase(email, newSecret, function (error) {
|
||||
if (error) {
|
||||
return emailPlugin.returnError(error, response);
|
||||
}
|
||||
return response.json({success: true}).end();
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = emailPlugin;
|
||||
|
||||
})();
|
||||
|
||||
@ -125,6 +125,7 @@ describe('emailstore test', function() {
|
||||
|
||||
it('should validate correctly an email if the secret matches', function() {
|
||||
leveldb_stub.get.onFirstCall().callsArgWith(1, null, secret);
|
||||
response.redirect = sinon.stub();
|
||||
|
||||
plugin.validate(request, response);
|
||||
|
||||
@ -167,5 +168,39 @@ describe('emailstore test', function() {
|
||||
assert(response.end.calledOnce);
|
||||
});
|
||||
});
|
||||
|
||||
describe('changing the user password', function() {
|
||||
it('should validate the previous passphrase', function() {
|
||||
request.param = sinon.stub();
|
||||
request.param.onFirstCall().returns('email');
|
||||
request.param.onSecondCall().returns('oldSecret');
|
||||
request.param.onThirdCall().returns('newSecret');
|
||||
response.status.onFirstCall().returnsThis();
|
||||
response.json.onFirstCall().returnsThis();
|
||||
|
||||
plugin.checkPassphrase = sinon.stub();
|
||||
plugin.checkPassphrase.onFirstCall().callsArgWith(2, 'error');
|
||||
|
||||
plugin.changePassphrase(request, response);
|
||||
assert(response.status.calledOnce);
|
||||
assert(response.json.calledOnce);
|
||||
assert(response.end.calledOnce);
|
||||
});
|
||||
it('should change the passphrase', function() {
|
||||
request.param.onFirstCall().returns('email');
|
||||
request.param.onSecondCall().returns('oldSecret');
|
||||
request.param.onThirdCall().returns('newSecret');
|
||||
response.json.onFirstCall().returnsThis();
|
||||
|
||||
plugin.checkPassphrase = sinon.stub();
|
||||
plugin.checkPassphrase.onFirstCall().callsArgWith(2, null);
|
||||
plugin.savePassphrase = sinon.stub();
|
||||
plugin.savePassphrase.onFirstCall().callsArgWith(2, null);
|
||||
|
||||
plugin.changePassphrase(request, response);
|
||||
assert(response.json.calledOnce);
|
||||
assert(response.end.calledOnce);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user