From c76c9ca2c86317f902f443db2c5704d4bf6311c0 Mon Sep 17 00:00:00 2001 From: bitpshr Date: Thu, 27 Sep 2018 14:19:09 -0400 Subject: EIP-1102: updated implementation --- app/scripts/metamask-controller.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 1f6a8659b..cffc5797b 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -37,6 +37,7 @@ const TransactionController = require('./controllers/transactions') const BalancesController = require('./controllers/computed-balances') const TokenRatesController = require('./controllers/token-rates') const DetectTokensController = require('./controllers/detect-tokens') +const ProviderApprovalController = require('./controllers/provider-approval') const nodeify = require('./lib/nodeify') const accountImporter = require('./account-import-strategies') const getBuyEthUrl = require('./lib/buy-eth-url') @@ -89,7 +90,7 @@ module.exports = class MetamaskController extends EventEmitter { this.preferencesController = new PreferencesController({ initState: initState.PreferencesController, initLangCode: opts.initLangCode, - showWatchAssetUi: opts.showWatchAssetUi, + openPopup: opts.openPopup, network: this.networkController, }) @@ -219,6 +220,13 @@ module.exports = class MetamaskController extends EventEmitter { this.typedMessageManager = new TypedMessageManager({ networkController: this.networkController }) this.publicConfigStore = this.initPublicConfigStore() + this.providerApprovalController = new ProviderApprovalController({ + closePopup: opts.closePopup, + openPopup: opts.openPopup, + platform: opts.platform, + publicConfigStore: this.publicConfigStore, + }) + this.store.updateStructure({ TransactionController: this.txController.store, KeyringController: this.keyringController.store, @@ -248,6 +256,7 @@ module.exports = class MetamaskController extends EventEmitter { NoticeController: this.noticeController.memStore, ShapeshiftController: this.shapeshiftController.store, InfuraController: this.infuraController.store, + ProviderApprovalController: this.providerApprovalController.store, }) this.memStore.subscribe(this.sendUpdate.bind(this)) } @@ -263,7 +272,10 @@ module.exports = class MetamaskController extends EventEmitter { }, version, // account mgmt - getAccounts: async () => { + getAccounts: async ({ origin }) => { + // Expose no accounts if this origin has not been approved, preventing + // account-requring RPC methods from completing successfully + if (origin !== 'MetaMask' && !this.providerApprovalController.isApproved(origin)) { return [] } const isUnlocked = this.keyringController.memStore.getState().isUnlocked const selectedAddress = this.preferencesController.getSelectedAddress() // only show address if account is unlocked @@ -349,6 +361,7 @@ module.exports = class MetamaskController extends EventEmitter { const noticeController = this.noticeController const addressBookController = this.addressBookController const networkController = this.networkController + const providerApprovalController = this.providerApprovalController return { // etc @@ -437,6 +450,10 @@ module.exports = class MetamaskController extends EventEmitter { // notices checkNotices: noticeController.updateNoticesList.bind(noticeController), markNoticeRead: noticeController.markNoticeRead.bind(noticeController), + + approveProviderRequest: providerApprovalController.approveProviderRequest.bind(providerApprovalController), + clearApprovedOrigins: providerApprovalController.clearApprovedOrigins.bind(providerApprovalController), + rejectProviderRequest: providerApprovalController.rejectProviderRequest.bind(providerApprovalController), } } -- cgit v1.2.3 From 89b4aa5d62237f36fac9dcce9c546005ec18968b Mon Sep 17 00:00:00 2001 From: bitpshr Date: Mon, 1 Oct 2018 20:52:31 -0400 Subject: EIP-1102: Add option to force-enable provider --- app/scripts/metamask-controller.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index cffc5797b..d8f8a4602 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -275,7 +275,8 @@ module.exports = class MetamaskController extends EventEmitter { getAccounts: async ({ origin }) => { // Expose no accounts if this origin has not been approved, preventing // account-requring RPC methods from completing successfully - if (origin !== 'MetaMask' && !this.providerApprovalController.isApproved(origin)) { return [] } + const isApproved = await this.providerApprovalController.isApproved(origin) + if (origin !== 'MetaMask' && !isApproved) { return [] } const isUnlocked = this.keyringController.memStore.getState().isUnlocked const selectedAddress = this.preferencesController.getSelectedAddress() // only show address if account is unlocked @@ -454,6 +455,7 @@ module.exports = class MetamaskController extends EventEmitter { approveProviderRequest: providerApprovalController.approveProviderRequest.bind(providerApprovalController), clearApprovedOrigins: providerApprovalController.clearApprovedOrigins.bind(providerApprovalController), rejectProviderRequest: providerApprovalController.rejectProviderRequest.bind(providerApprovalController), + forceInjection: providerApprovalController.forceInjection.bind(providerApprovalController), } } -- cgit v1.2.3 From 226601a956594d00817cdb1fa5214242aae7936c Mon Sep 17 00:00:00 2001 From: bitpshr Date: Wed, 10 Oct 2018 14:52:26 -0400 Subject: EIP-1102: add user privacy option --- app/scripts/metamask-controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index d8f8a4602..2265838fb 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -224,6 +224,7 @@ module.exports = class MetamaskController extends EventEmitter { closePopup: opts.closePopup, openPopup: opts.openPopup, platform: opts.platform, + preferencesController: this.preferencesController, publicConfigStore: this.publicConfigStore, }) @@ -275,7 +276,7 @@ module.exports = class MetamaskController extends EventEmitter { getAccounts: async ({ origin }) => { // Expose no accounts if this origin has not been approved, preventing // account-requring RPC methods from completing successfully - const isApproved = await this.providerApprovalController.isApproved(origin) + const isApproved = this.providerApprovalController.isApproved(origin) if (origin !== 'MetaMask' && !isApproved) { return [] } const isUnlocked = this.keyringController.memStore.getState().isUnlocked const selectedAddress = this.preferencesController.getSelectedAddress() @@ -455,7 +456,6 @@ module.exports = class MetamaskController extends EventEmitter { approveProviderRequest: providerApprovalController.approveProviderRequest.bind(providerApprovalController), clearApprovedOrigins: providerApprovalController.clearApprovedOrigins.bind(providerApprovalController), rejectProviderRequest: providerApprovalController.rejectProviderRequest.bind(providerApprovalController), - forceInjection: providerApprovalController.forceInjection.bind(providerApprovalController), } } -- cgit v1.2.3 From 84874a639d217da36926869fa3cb235c05725cf5 Mon Sep 17 00:00:00 2001 From: bitpshr Date: Wed, 17 Oct 2018 18:38:31 -0400 Subject: Add isUnlocked provider hook --- app/scripts/metamask-controller.js | 1 + 1 file changed, 1 insertion(+) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 2265838fb..8930a3f2d 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -226,6 +226,7 @@ module.exports = class MetamaskController extends EventEmitter { platform: opts.platform, preferencesController: this.preferencesController, publicConfigStore: this.publicConfigStore, + keyringController: this.keyringController, }) this.store.updateStructure({ -- cgit v1.2.3 From ba40fcbcb43c5adcb3a961afd4050cdb2025b7a6 Mon Sep 17 00:00:00 2001 From: bitpshr Date: Mon, 29 Oct 2018 21:55:13 +0100 Subject: Handle logout gracefully --- app/scripts/metamask-controller.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 8930a3f2d..bf1df7ff5 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -422,7 +422,7 @@ module.exports = class MetamaskController extends EventEmitter { setAddressBook: nodeify(addressBookController.setAddressBook, addressBookController), // KeyringController - setLocked: nodeify(keyringController.setLocked, keyringController), + setLocked: nodeify(this.setLocked, this), createNewVaultAndKeychain: nodeify(this.createNewVaultAndKeychain, this), createNewVaultAndRestore: nodeify(this.createNewVaultAndRestore, this), addNewKeyring: nodeify(keyringController.addNewKeyring, keyringController), @@ -1576,4 +1576,9 @@ module.exports = class MetamaskController extends EventEmitter { whitelistPhishingDomain (hostname) { return this.blacklistController.whitelistDomain(hostname) } + + setLocked() { + this.providerApprovalController.setLocked() + return this.keyringController.setLocked() + } } -- cgit v1.2.3 From d7618bd5c6cffe02d8737fe6925a31484a1fc0b0 Mon Sep 17 00:00:00 2001 From: bitpshr Date: Mon, 29 Oct 2018 22:28:59 +0100 Subject: Code bath --- app/scripts/metamask-controller.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index bf1df7ff5..33278db85 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -222,11 +222,11 @@ module.exports = class MetamaskController extends EventEmitter { this.providerApprovalController = new ProviderApprovalController({ closePopup: opts.closePopup, + keyringController: this.keyringController, openPopup: opts.openPopup, platform: opts.platform, preferencesController: this.preferencesController, publicConfigStore: this.publicConfigStore, - keyringController: this.keyringController, }) this.store.updateStructure({ @@ -1577,6 +1577,9 @@ module.exports = class MetamaskController extends EventEmitter { return this.blacklistController.whitelistDomain(hostname) } + /** + * Locks MetaMask + */ setLocked() { this.providerApprovalController.setLocked() return this.keyringController.setLocked() -- cgit v1.2.3 From cc1bab6ebbef8d8219f83039fdc3baca6de718fd Mon Sep 17 00:00:00 2001 From: bitpshr Date: Mon, 29 Oct 2018 22:54:39 +0100 Subject: Differentiate locked and enabled --- app/scripts/metamask-controller.js | 1 - 1 file changed, 1 deletion(-) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 33278db85..c7fc42eb4 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -1581,7 +1581,6 @@ module.exports = class MetamaskController extends EventEmitter { * Locks MetaMask */ setLocked() { - this.providerApprovalController.setLocked() return this.keyringController.setLocked() } } -- cgit v1.2.3 From d4171ccea51db04aa40320de8770e22203d4d6c2 Mon Sep 17 00:00:00 2001 From: bitpshr Date: Mon, 29 Oct 2018 23:44:04 +0100 Subject: Disable approval caching --- app/scripts/metamask-controller.js | 1 + 1 file changed, 1 insertion(+) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index c7fc42eb4..33278db85 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -1581,6 +1581,7 @@ module.exports = class MetamaskController extends EventEmitter { * Locks MetaMask */ setLocked() { + this.providerApprovalController.setLocked() return this.keyringController.setLocked() } } -- cgit v1.2.3 From 34d80f21e2ed4842d196dc580a9441a2731a5c0e Mon Sep 17 00:00:00 2001 From: bitpshr Date: Tue, 6 Nov 2018 14:13:27 -0500 Subject: Clear cached approval after rejection --- app/scripts/metamask-controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 33278db85..5ae0f608d 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -277,8 +277,8 @@ module.exports = class MetamaskController extends EventEmitter { getAccounts: async ({ origin }) => { // Expose no accounts if this origin has not been approved, preventing // account-requring RPC methods from completing successfully - const isApproved = this.providerApprovalController.isApproved(origin) - if (origin !== 'MetaMask' && !isApproved) { return [] } + const exposeAccounts = this.providerApprovalController.shouldExposeAccounts(origin) + if (origin !== 'MetaMask' && !exposeAccounts) { return [] } const isUnlocked = this.keyringController.memStore.getState().isUnlocked const selectedAddress = this.preferencesController.getSelectedAddress() // only show address if account is unlocked -- cgit v1.2.3 From 0549782595335e8257d1b4abf7d6220020e2c8db Mon Sep 17 00:00:00 2001 From: Paul Bouchon Date: Tue, 13 Nov 2018 14:57:43 -0500 Subject: Update Balanc3 API (#5744) * Update balanc3 API used in TokenRatesController * Remove demo URL and use nativeCurrency when fetching token rates --- app/scripts/metamask-controller.js | 1 + 1 file changed, 1 insertion(+) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 5ae0f608d..641a7ef3f 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -117,6 +117,7 @@ module.exports = class MetamaskController extends EventEmitter { // token exchange rate tracker this.tokenRatesController = new TokenRatesController({ + currency: this.currencyController.store, preferences: this.preferencesController.store, }) -- cgit v1.2.3 From 1988e1e96b09a47ad5428083bb2ed38cb2d7e0a8 Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Fri, 16 Nov 2018 21:24:55 -0330 Subject: ESLint fixes (#5775) * eslint . --fix * Upgrade all ESLint warnings to errors --- app/scripts/metamask-controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/scripts/metamask-controller.js') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 641a7ef3f..f3cd078b8 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -200,7 +200,7 @@ module.exports = class MetamaskController extends EventEmitter { this.networkController.on('networkDidChange', () => { this.balancesController.updateAllBalances() var currentCurrency = this.currencyController.getCurrentCurrency() - this.setCurrentCurrency(currentCurrency, function() {}) + this.setCurrentCurrency(currentCurrency, function () {}) }) this.balancesController.updateAllBalances() @@ -1581,7 +1581,7 @@ module.exports = class MetamaskController extends EventEmitter { /** * Locks MetaMask */ - setLocked() { + setLocked () { this.providerApprovalController.setLocked() return this.keyringController.setLocked() } -- cgit v1.2.3