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.post(apiPrefix + '/email/validate', emailPlugin.validate);
|
||||||
app.get(apiPrefix + '/email/retrieve/:email', emailPlugin.get);
|
app.get(apiPrefix + '/email/retrieve/:email', emailPlugin.get);
|
||||||
app.get(apiPrefix + '/email/validate', emailPlugin.validate);
|
app.get(apiPrefix + '/email/validate', emailPlugin.validate);
|
||||||
|
app.post(apiPrefix + '/email/change_passphrase', emailPlugin.changePassphrase);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Address routes
|
// Address routes
|
||||||
|
|||||||
@ -240,7 +240,13 @@ emailPlugin.checkPassphrase = function(email, passphrase, callback) {
|
|||||||
* @param {Function(err)} callback
|
* @param {Function(err)} callback
|
||||||
*/
|
*/
|
||||||
emailPlugin.savePassphrase = function(email, passphrase, 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 {
|
} else {
|
||||||
emailPlugin.savePassphrase(email, secret, function(err) {
|
emailPlugin.savePassphrase(email, secret, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback({code: 500, message: err});
|
return callback(err);
|
||||||
}
|
}
|
||||||
return callback();
|
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;
|
module.exports = emailPlugin;
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|||||||
@ -125,6 +125,7 @@ describe('emailstore test', function() {
|
|||||||
|
|
||||||
it('should validate correctly an email if the secret matches', function() {
|
it('should validate correctly an email if the secret matches', function() {
|
||||||
leveldb_stub.get.onFirstCall().callsArgWith(1, null, secret);
|
leveldb_stub.get.onFirstCall().callsArgWith(1, null, secret);
|
||||||
|
response.redirect = sinon.stub();
|
||||||
|
|
||||||
plugin.validate(request, response);
|
plugin.validate(request, response);
|
||||||
|
|
||||||
@ -167,5 +168,39 @@ describe('emailstore test', function() {
|
|||||||
assert(response.end.calledOnce);
|
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