mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-12-06 17:27:59 +00:00
[CHORE] offline tests for vault client
This commit is contained in:
@@ -4,17 +4,23 @@ var AuthInfo = require('../src/js/ripple/authinfo').AuthInfo;
|
||||
var VaultClient = require('../src/js/ripple/vaultclient').VaultClient;
|
||||
var Blob = require('../src/js/ripple/blob').Blob;
|
||||
var UInt256 = require('../src/js/ripple/uint256').UInt256;
|
||||
var sjcl = require('../src/js/sjcl/sjcl.js');
|
||||
var sjcl = require('../build/sjcl');
|
||||
var random = require('crypto').randomBytes(2048);
|
||||
var nock = require('nock');
|
||||
var online = process.argv.indexOf('--online-blobvault') !== -1 ? true : false;
|
||||
|
||||
sjcl.random.addEntropy(random.toString());
|
||||
var exampleData = {
|
||||
id: 'ef203d3e76552c0592384f909e6f61f1d1f02f61f07643ce015d8b0c9710dd2f',
|
||||
crypt: 'f0cc91a7c1091682c245cd8e13c246cc150b2cf98b17dd6ef092019c99dc9d82',
|
||||
unlock: '3e15fe3218a9c664835a6f585582e14480112110ddbe50e5028d05fc5bd9b5f4',
|
||||
username: 'exampleUser',
|
||||
new_username : 'exampleUser-rename',
|
||||
password: 'pass word',
|
||||
domain: 'staging.ripple.com',
|
||||
masterkey : 'ssize4HrSYZShMWBtK6BhALGEk8VH',
|
||||
email_token : '77825040-9096-4695-9cbc-76720f6a8649',
|
||||
activateLink : 'https://staging.ripple.com/client/#/register/activate/',
|
||||
blob: {
|
||||
url: 'https://id.staging.ripple.com',
|
||||
id: 'ef203d3e76552c0592384f909e6f61f1d1f02f61f07643ce015d8b0c9710dd2f',
|
||||
@@ -55,6 +61,24 @@ var authInfoRes = {
|
||||
}
|
||||
};
|
||||
|
||||
var authInfoNewUsernameRes = {
|
||||
body : {
|
||||
version: 3,
|
||||
blobvault: 'https://id.staging.ripple.com',
|
||||
pakdf: {
|
||||
modulus: 'c7f1bc1dfb1be82d244aef01228c1409c1988943ca9e21431f1669b4aa3864c9f37f3d51b2b4ba1ab9e80f59d267fda1521e88b05117993175e004543c6e3611242f24432ce8efa3b81f0ff660b4f91c5d52f2511a6f38181a7bf9abeef72db056508bbb4eeb5f65f161dd2d5b439655d2ae7081fcc62fdcb281520911d96700c85cdaf12e7d1f15b55ade867240722425198d4ce39019550c4c8a921fc231d3e94297688c2d77cd68ee8fdeda38b7f9a274701fef23b4eaa6c1a9c15b2d77f37634930386fc20ec291be95aed9956801e1c76601b09c413ad915ff03bfdc0b6b233686ae59e8caf11750b509ab4e57ee09202239baee3d6e392d1640185e1cd',
|
||||
alpha: '7283d19e784f48a96062271a5fa6e2c3addf14e6ezf78a4bb61364856d580f13552008d7b9e3b60ebd9555e9f6c7778ec69f976757d206134e54d61ba9d588a7e37a77cf48060522478352d76db000366ef669a1b1ca93c5e3e05bc344afa1e8ccb15d3343da94180dccf590c2c32408c3f3f176c8885e95d988f1565ee9b80c12f72503ab49917792f907bbb9037487b0afed967fefc9ab090164597fcd391c43fab33029b38e66ff4af96cbf6d90a01b891f856ddd3d94e9c9b307fe01e1353a8c30edd5a94a0ebba5fe7161569000ad3b0d3568872d52b6fbdfce987a687e4b346ea702e8986b03b6b1b85536c813e46052a31ed64ec490d3ba38029544aa',
|
||||
url: 'https://auth1.ripple.com/api/sign',
|
||||
exponent: '010001',
|
||||
host: 'auth1.ripple.com'
|
||||
},
|
||||
exists: false,
|
||||
username: exampleData.new_username,
|
||||
emailVerified: false,
|
||||
reserved: false
|
||||
}
|
||||
};
|
||||
|
||||
var signRes = '{"result":"success","signres":"64e9e46618fff0b720b8162e6caa209e046af128b929b766d3be421d3f048ba523453dad42597dcec01f23a5080c16695f6209d39a03668d46b782409e4a53821f70b5e6f7c8fd28eb641c504f9f9b2f378bf2ea7f19950790ac6a8832e2659800f5bb06b735bd450fa47b499fbcebeb3b0fc327619dd2171fa40fb0a41d9bcd69dd29567fa94e9466d4674b908f1cfc43822b38b94534cb37eead183b11b33761a73d78be6ba6f3a53291d4154ca0891fa59da58380e05a1e85b15a24d12406795385bcc5a6360a24ecbf068ff6f02097cd917281972d4895769f3a8668b852ea5d4232050200bcd03934f49ea0693d832980614dff1ead67ca2e0ce9073c25","modulus":"c7f1bc1dfb1be82d244aef01228c1409c198894eca9e21430f1669b4aa3864c9f37f3d51b2b4ba1ab9e80f59d267fda1521e88b05117993175e004543c6e3611242f24432ce8efa3b81f0ff660b4f91c5d52f2511a6f38181a7bf9abeef72db056508bbb4eeb5f65f161dd2d5b439655d2ae7081fcc62fdcb281520911d96700c85cdaf12e7d1f15b55ade867240722425198d4ce39019550c4c8a921fc231d3e94297688c2d77cd68ee8fdeda38b7f9a274701fef23b4eaa6c1a9c15b2d77f37634930386fc20ec291be95aed9956801e1c76601b09c413ad915ff03bfdc0b6b233686ae59e8caf11750b509ab4e57ee09202239baee3d6e392d1640185e1cd","alpha":"7283d19e784f48a96062271a4fa6e2c3addf14e6edf78a4bb61364856d580f13552008d7b9e3b60ebd9555e9f6c7778ec69f976757d206134e54d61ba9d588a7e37a77cf48060522478352d76db000366ef669a1b1ca93c5e3e05bc344afa1e8ccb15d3343da94180dccf590c2c32408c3f3f176c8885e95d988f1565ee9b80c12f72503ab49917792f907bbb9037487b0afed967fefc9ab090164597fcd391c43fab33029b38e66ff4af96cbf6d90a01b891f856ddd3d94e9c9b307fe01e1353a8c30edd5a94a0ebba5fe7161569000ad3b0d3568872d52b6fbdfce987a687e4b346ea702e8986b03b6b1b85536c813e46052a31ed64ec490d3ba38029544aa","exponent":"010001"}';
|
||||
|
||||
var blobRes = {
|
||||
@@ -69,13 +93,36 @@ var blobRes = {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var recoverRes = {
|
||||
body: {
|
||||
encrypted_secret: 'AAd69B9En2OF4O4LsjD+pFNeJHEGIuLh2hbla58zGvN7qU/16bDfy0QlFj8/Gu++AdFwH5U6',
|
||||
revision: 2403,
|
||||
blob_id: 'ef203d3e76552c0592384f909e6f61f1d1f02f61f07643ce015d8b0c9710dd2f',
|
||||
blob: 'AFfW9vuHJ2J5UMnEl4WrVIT9z2d+PPVNNHkqzN64b3pKDQcRPFp8vVEqL9B+YVs/KHhFVFNxxCNyVXwO/yGg4BAslYl8Ioo11IODmOltJmb94oKR/JVyfaY4bDWaOzAoa5N/c9LHpmd0L+9igK1o260MK5OZW4BQ6EG7I+8cYi5uM2CLguiddySu2yTEnyHW47zspWP33y2deh6p5mHtLdii/tmlm7b2rKpzrRVuLN/J09jqilhMxlCEr4X065YZLlQapJ45UWvpifejEw/6Qgl1WngZxwifHa504aR/QYhb1XCNeYbkjQ1MmkTmTef47Al4r/Irzoe//pDbAFA70XXkBUVUMAXWiOxU5V6gHO4yhXbTFEn7922JZlY7PIjo2Q+BxLkozMzuh8MZdoeadqffZX1fOuyTRWfPlqi7vIYgnUyTmThKe2EZv1LsB5ZUaX3KSArKDv1xPTKS0nexGNZoFckwEfVr6B2PGbMx8LPLYEEEmd95kh8NAKN1wkOPuBehLAtbMtcnLpTsotY6diqWdW4V9BSst0KDMTxZVfeesWD7/7ga9hzNvAWO1MN3aAvDCiQVufb44i4Qfu6fLS7+nxtcDCN2PqPHcANcW0cUhUNB50ajzNwRXN8B92CiY0zkS61CzWeooHOslGp0Acau1CJy8iHGyjzbPS4ui8F2h2TbDUuInOoMqiRjXFvRTxA=',
|
||||
encrypted_blobdecrypt_key: 'AA9vUokfQ1WXEOArl2DUwY3cxgXGKj9uNEqrJQzUu0hqXIWRu1V+6l1qqxXKPnm9BNscMpm0BMSbxUz++lfV50c1B4akvrzIBH+MUUgNyyPcHR7JBgjEYt0=',
|
||||
patches: [],
|
||||
result: 'success'
|
||||
}
|
||||
}
|
||||
|
||||
var blob = new Blob();
|
||||
blob.url = exampleData.blob.url;
|
||||
blob.id = exampleData.blob.id;
|
||||
blob.key = exampleData.blob.key;
|
||||
blob.data = exampleData.blob.data;
|
||||
blob.revision = exampleData.blob.data.revision;
|
||||
|
||||
//must be set for self signed certs
|
||||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
||||
|
||||
var mockRippleTxt;
|
||||
var mockAuthSign;
|
||||
var mockBlob;
|
||||
var mockRename;
|
||||
var mockUpdate;
|
||||
var mockRecover;
|
||||
var mockVerify;
|
||||
var mockEmail;
|
||||
|
||||
if (!online) {
|
||||
mockRippleTxt = nock('https://' + exampleData.domain)
|
||||
@@ -89,22 +136,63 @@ if (!online) {
|
||||
mockBlob.get('/v1/authinfo?domain=' + exampleData.domain + '&username=' + exampleData.username.toLowerCase())
|
||||
.reply(200, JSON.stringify(authInfoRes.body), {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
});
|
||||
|
||||
mockBlob.get('/v1/authinfo?domain=' + exampleData.domain + '&username=' + exampleData.new_username.toLowerCase())
|
||||
.reply(200, JSON.stringify(authInfoNewUsernameRes.body), {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
mockBlob.filteringPath(/(blob\/.+)/g, 'blob/')
|
||||
.get('/v1/blob/')
|
||||
.reply(200, JSON.stringify(blobRes.body), {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
mockRename = nock('https://id.staging.ripple.com/v1/user/').persist();
|
||||
mockRename.filteringPath(/((.+)\/rename(.+))/g, 'rename/')
|
||||
.post('rename/')
|
||||
.reply(200, {result:'success',message:'rename'}, {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
mockUpdate = nock('https://id.staging.ripple.com/v1/user/').persist();
|
||||
mockUpdate.filteringPath(/((.+)\/update(.+))/g, 'update/')
|
||||
.post('update/')
|
||||
.reply(200, {result:'success',message:'updateKeys'}, {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
mockRecover = nock('https://id.staging.ripple.com/').persist();
|
||||
mockRecover.filteringPath(/((.+)user\/recov\/(.+))/g, 'recov/')
|
||||
.get('recov/')
|
||||
.reply(200, recoverRes.body, {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
mockVerify = nock('https://id.staging.ripple.com/v1/user/').persist();
|
||||
mockVerify.filteringPath(/((.+)\/verify(.+))/g, 'verify/')
|
||||
.get('verify/')
|
||||
.reply(200, {result:'error', message:'invalid token'}, {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
mockEmail = nock('https://id.staging.ripple.com/v1/user').persist();
|
||||
mockEmail.filteringPath(/((.+)\/email(.+))/g, 'email/')
|
||||
.post('email/')
|
||||
.reply(200, {result:'success'}, {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
mockAuthSign = nock('https://auth1.ripple.com')
|
||||
.persist()
|
||||
.post('/api/sign')
|
||||
.reply(200, signRes, {
|
||||
'Content-Type': 'text/plain'
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
describe('Ripple Txt', function () {
|
||||
it('should get the content of a ripple.txt file from a given domain', function(done) {
|
||||
var rt = new RippleTxt();
|
||||
@@ -243,18 +331,16 @@ describe('VaultClient', function () {
|
||||
});
|
||||
|
||||
describe('Blob', function () {
|
||||
|
||||
var vaultClient;
|
||||
var client;
|
||||
var resp;
|
||||
var blob;
|
||||
|
||||
vaultClient = new VaultClient({ domain: exampleData.domain });
|
||||
client = new VaultClient({ domain: exampleData.domain });
|
||||
|
||||
before(function(done) {
|
||||
if (online) {
|
||||
this.timeout(10000);
|
||||
|
||||
vaultClient.login(exampleData.username, exampleData.password, function(err, res) {
|
||||
client.login(exampleData.username, exampleData.password, function(err, res) {
|
||||
resp = res;
|
||||
blob = res.blob;
|
||||
done();
|
||||
@@ -266,16 +352,124 @@ describe('Blob', function () {
|
||||
.reply(200, {result:'success'}, {
|
||||
'Content-Type': 'application/json'
|
||||
});
|
||||
|
||||
blob = new Blob();
|
||||
blob.url = exampleData.blob.url;
|
||||
blob.id = exampleData.blob.id;
|
||||
blob.key = exampleData.blob.key;
|
||||
blob.data = exampleData.blob.data;
|
||||
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
describe('#rename', function () {
|
||||
it('should change the username of a blob', function (done) {
|
||||
this.timeout(20000);
|
||||
|
||||
var options = {
|
||||
username : exampleData.username,
|
||||
new_username : exampleData.new_username,
|
||||
password : exampleData.password,
|
||||
masterkey : exampleData.masterkey,
|
||||
blob : blob
|
||||
}
|
||||
|
||||
|
||||
client.rename(options, function(err, resp) {
|
||||
assert.ifError(err);
|
||||
assert.equal(typeof resp, 'object');
|
||||
assert.equal(typeof resp.result, 'string');
|
||||
assert.equal(typeof resp.message, 'string');
|
||||
|
||||
if (online) {
|
||||
options.username = exampleData.new_username;
|
||||
options.new_username = exampleData.username;
|
||||
|
||||
//change it back
|
||||
client.rename(options, function(err,resp){
|
||||
assert.ifError(err);
|
||||
assert.equal(typeof resp, 'object');
|
||||
assert.equal(typeof resp.result, 'string');
|
||||
assert.equal(typeof resp.message, 'string');
|
||||
done();
|
||||
});
|
||||
|
||||
} else {
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#changePassword', function () {
|
||||
it('should change the password and keys of a blob', function (done) {
|
||||
this.timeout(10000);
|
||||
|
||||
var options = {
|
||||
username : exampleData.username,
|
||||
password : exampleData.password,
|
||||
masterkey : exampleData.masterkey,
|
||||
blob : blob
|
||||
}
|
||||
|
||||
client.changePassword(options, function(err, resp) {
|
||||
assert.ifError(err);
|
||||
assert.equal(typeof resp, 'object');
|
||||
assert.equal(typeof resp.result, 'string');
|
||||
assert.equal(typeof resp.message, 'string');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#recoverBlob', function () {
|
||||
it('should recover the blob given a username and secret', function (done) {
|
||||
this.timeout(10000);
|
||||
|
||||
var options = {
|
||||
url : exampleData.blob.url,
|
||||
username : exampleData.username,
|
||||
masterkey : exampleData.masterkey,
|
||||
}
|
||||
|
||||
client.recoverBlob(options, function(err, blob) {
|
||||
assert.ifError(err);
|
||||
assert(blob instanceof Blob);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#verifyEmail', function () {
|
||||
it('should verify an email given a username and token', function (done) {
|
||||
this.timeout(10000);
|
||||
|
||||
client.verify(exampleData.username, exampleData.email_token, function(err, resp) {
|
||||
//result will be error, because of invalid token
|
||||
assert(err instanceof Error);
|
||||
assert.strictEqual(resp, void(0));
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#resendVerifcationEmail', function () {
|
||||
it('should resend a verification given options', function (done) {
|
||||
this.timeout(10000);
|
||||
|
||||
var options = {
|
||||
url : exampleData.blob.url,
|
||||
id : exampleData.blob.id,
|
||||
username : exampleData.username,
|
||||
account_id : exampleData.blob.data.account_id,
|
||||
email : exampleData.blob.data.email,
|
||||
activateLink : exampleData.activateLink,
|
||||
masterkey : exampleData.masterkey
|
||||
}
|
||||
client.resendEmail(options, function(err, resp) {
|
||||
assert.ifError(err);
|
||||
assert.equal(typeof resp, 'object');
|
||||
assert.equal(typeof resp.result, 'string');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('#set', function(done) {
|
||||
this.timeout(10000)
|
||||
blob.extend('/testObject', {
|
||||
|
||||
Reference in New Issue
Block a user