Proper default accounts RPCs (#4580)

* Default accounts setting - account provider

* RPC support for default accounts

* Updating JS code

* Rename whitelist to addresses
This commit is contained in:
Tomasz Drwięga
2017-02-20 16:33:12 +01:00
committed by Gav Wood
parent 1949d44d0c
commit 72998d3ce3
22 changed files with 511 additions and 161 deletions

View File

@@ -170,18 +170,30 @@ export default class Parity {
.execute('parity_generateSecretPhrase');
}
getDappsAddresses (dappId) {
getDappAddresses (dappId) {
return this._transport
.execute('parity_getDappsAddresses', dappId)
.execute('parity_getDappAddresses', dappId)
.then(outAddresses);
}
getNewDappsWhitelist () {
getDappDefaultAddress (dappId) {
return this._transport
.execute('parity_getNewDappsWhitelist')
.execute('parity_getDappDefaultAddress', dappId)
.then(outAddress);
}
getNewDappsAddresses () {
return this._transport
.execute('parity_getNewDappsAddresses')
.then((addresses) => addresses ? addresses.map(outAddress) : null);
}
getNewDappsDefaultAddress () {
return this._transport
.execute('parity_getNewDappsDefaultAddress')
.then(outAddress);
}
getVaultMeta (vaultName) {
return this._transport
.execute('parity_getVaultMeta', vaultName)
@@ -391,9 +403,14 @@ export default class Parity {
.execute('parity_setAuthor', inAddress(address));
}
setDappsAddresses (dappId, addresses) {
setDappAddresses (dappId, addresses) {
return this._transport
.execute('parity_setDappsAddresses', dappId, inAddresses(addresses));
.execute('parity_setDappAddresses', dappId, inAddresses(addresses));
}
setDappDefaultAddress (dappId, address) {
return this._transport
.execute('parity_setDappDefaultAddress', dappId, address ? inAddress(address) : null);
}
setEngineSigner (address, password) {
@@ -431,9 +448,14 @@ export default class Parity {
.execute('parity_setMode', mode);
}
setNewDappsWhitelist (addresses) {
setNewDappsAddresses (addresses) {
return this._transport
.execute('parity_setNewDappsWhitelist', addresses ? inAddresses(addresses) : null);
.execute('parity_setNewDappsAddresses', addresses ? inAddresses(addresses) : null);
}
setNewDappsDefaultAddress (address) {
return this._transport
.execute('parity_setNewDappsDefaultAddress', inAddress(address));
}
setTransactionsLimit (quantity) {

View File

@@ -123,8 +123,10 @@ export default class Personal {
this._accountsInfo();
return;
case 'parity_setDappsAddresses':
case 'parity_setNewDappsWhitelist':
case 'parity_setDappAddresses':
case 'parity_setDappDefaultAddress':
case 'parity_setNewDappsAddresses':
case 'parity_setNewDappsDefaultAddress':
this._defaultAccount(true);
this._listAccounts();
return;

View File

@@ -1186,9 +1186,9 @@ export default {
}
},
setDappsAddresses: {
setDappAddresses: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Sets the available addresses for a dapp.',
desc: 'Sets the available addresses for a dapp. When provided with non-empty list changes the default account as well.',
params: [
{
type: String,
@@ -1197,7 +1197,7 @@ export default {
},
{
type: Array,
desc: 'Array of available accounts available to the dapp.',
desc: 'Array of available accounts available to the dapp or `null` for default list.',
example: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1']
}
],
@@ -1208,7 +1208,7 @@ export default {
}
},
getDappsAddresses: {
getDappAddresses: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Returns the list of accounts available to a specific dapp.',
params: [
@@ -1225,13 +1225,52 @@ export default {
}
},
setNewDappsWhitelist: {
setDappDefaultAddress: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Changes dapp default address. Does not affect other accounts exposed for this dapp, but default account will always be retured as the first one.',
params: [
{
type: String,
desc: 'Dapp Id.',
example: 'web'
},
{
type: Address,
desc: 'Default Address.',
example: '0x407d73d8a49eeb85d32cf465507dd71d507100c1'
}
],
returns: {
type: Boolean,
desc: '`true` if the call was successful',
example: true
}
},
getDappDefaultAddress: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Returns a default account available to a specific dapp.',
params: [
{
type: String,
desc: 'Dapp Id.',
example: 'web'
}
],
returns: {
type: Address,
desc: 'Default Address',
example: '0x407d73d8a49eeb85d32cf465507dd71d507100c1'
}
},
setNewDappsAddresses: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Sets the list of accounts available to new dapps.',
params: [
{
type: Array,
desc: 'List of accounts available by default.',
desc: 'List of accounts available by default or `null` for all accounts.',
example: ['0x407d73d8a49eeb85d32cf465507dd71d507100c1']
}
],
@@ -1242,7 +1281,7 @@ export default {
}
},
getNewDappsWhitelist: {
getNewDappsAddresses: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Returns the list of accounts available to a new dapps.',
params: [],
@@ -1253,6 +1292,34 @@ export default {
}
},
setNewDappsDefaultAddress: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Changes global default address. This setting may be overriden for a specific dapp.',
params: [
{
type: Address,
desc: 'Default Address.',
example: '0x407d73d8a49eeb85d32cf465507dd71d507100c1'
}
],
returns: {
type: Boolean,
desc: '`true` if the call was successful',
example: true
}
},
getNewDappsDefaultAddress: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Returns a default account available to dapps.',
params: [],
returns: {
type: Address,
desc: 'Default Address',
example: '0x407d73d8a49eeb85d32cf465507dd71d507100c1'
}
},
listRecentDapps: {
subdoc: SUBDOC_ACCOUNTS,
desc: 'Returns a list of the most recent active dapps.',

View File

@@ -102,7 +102,7 @@ export default class Store {
loadWhitelist () {
return this._api.parity
.getNewDappsWhitelist()
.getNewDappsAddresses()
.then((whitelist) => {
this.setWhitelist(whitelist);
})
@@ -113,7 +113,7 @@ export default class Store {
updateWhitelist (whitelist) {
return this._api.parity
.setNewDappsWhitelist(whitelist)
.setNewDappsAddresses(whitelist)
.then(() => {
this.setWhitelist(whitelist);
})

View File

@@ -31,8 +31,8 @@ let store;
function create () {
api = {
parity: {
getNewDappsWhitelist: sinon.stub().resolves(WHITELIST),
setNewDappsWhitelist: sinon.stub().resolves(true)
getNewDappsAddresses: sinon.stub().resolves(WHITELIST),
setNewDappsAddresses: sinon.stub().resolves(true)
}
};
@@ -46,7 +46,7 @@ describe('modals/DappPermissions/store', () => {
describe('constructor', () => {
it('retrieves the whitelist via api', () => {
expect(api.parity.getNewDappsWhitelist).to.be.calledOnce;
expect(api.parity.getNewDappsAddresses).to.be.calledOnce;
});
it('sets the retrieved whitelist', () => {
@@ -79,12 +79,12 @@ describe('modals/DappPermissions/store', () => {
store.closeModal();
});
it('calls setNewDappsWhitelist', () => {
expect(api.parity.setNewDappsWhitelist).to.have.been.calledOnce;
it('calls setNewDappsAddresses', () => {
expect(api.parity.setNewDappsAddresses).to.have.been.calledOnce;
});
it('has the default account in first position', () => {
expect(api.parity.setNewDappsWhitelist).to.have.been.calledWith(['789', '456']);
expect(api.parity.setNewDappsAddresses).to.have.been.calledWith(['789', '456']);
});
});

View File

@@ -61,7 +61,7 @@ export default class AccountStore {
this.setDefaultAccount(address);
return this._api.parity
.setNewDappsWhitelist(accounts)
.setNewDappsAddresses(accounts)
.catch((error) => {
console.warn('makeDefaultAccount', error);
});
@@ -78,7 +78,7 @@ export default class AccountStore {
return Promise
.all([
this._api.parity.getNewDappsWhitelist(),
this._api.parity.getNewDappsAddresses(),
this._api.parity.allAccountsInfo()
])
.then(([whitelist, accounts]) => {

View File

@@ -76,8 +76,8 @@ describe('views/ParityBar/AccountStore', () => {
store.setAccounts.restore();
});
it('calls into parity_getNewDappsWhitelist', () => {
expect(api.parity.getNewDappsWhitelist).to.have.been.called;
it('calls into parity_getNewDappsAddresses', () => {
expect(api.parity.getNewDappsAddresses).to.have.been.called;
});
it('calls into parity_allAccountsInfo', () => {
@@ -104,8 +104,8 @@ describe('views/ParityBar/AccountStore', () => {
return store.makeDefaultAccount(ACCOUNT_NEW);
});
it('calls into parity_setNewDappsWhitelist (with ordering)', () => {
expect(api.parity.setNewDappsWhitelist).to.have.been.calledWith([
it('calls into parity_setNewDappsAddresses (with ordering)', () => {
expect(api.parity.setNewDappsAddresses).to.have.been.calledWith([
ACCOUNT_NEW, ACCOUNT_FIRST, ACCOUNT_DEFAULT
]);
});

View File

@@ -36,8 +36,8 @@ function createApi () {
parity: {
defaultAccount: sinon.stub().resolves(ACCOUNT_DEFAULT),
allAccountsInfo: sinon.stub().resolves(ACCOUNTS),
getNewDappsWhitelist: sinon.stub().resolves(null),
setNewDappsWhitelist: sinon.stub().resolves(true)
getNewDappsAddresses: sinon.stub().resolves(null),
setNewDappsAddresses: sinon.stub().resolves(true)
}
};