mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Handle logout gracefully
This commit is contained in:
parent
f02e18dd80
commit
ba40fcbcb4
@ -129,21 +129,21 @@ function listenForProviderRequest () {
|
|||||||
origin: source.location.hostname,
|
origin: source.location.hostname,
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case 'ETHEREUM_QUERY_STATUS':
|
case 'ETHEREUM_IS_APPROVED':
|
||||||
extension.runtime.sendMessage({
|
extension.runtime.sendMessage({
|
||||||
action: 'init-status-request',
|
action: 'init-is-approved',
|
||||||
origin: source.location.hostname,
|
origin: source.location.hostname,
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case 'METAMASK_UNLOCK_STATUS':
|
case 'METAMASK_IS_UNLOCKED':
|
||||||
extension.runtime.sendMessage({
|
extension.runtime.sendMessage({
|
||||||
action: 'init-unlock-request',
|
action: 'init-is-unlocked',
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
extension.runtime.onMessage.addListener(({ action, isEnabled, isUnlocked }) => {
|
extension.runtime.onMessage.addListener(({ action, isEnabled, isApproved, isUnlocked }) => {
|
||||||
if (!action) { return }
|
if (!action) { return }
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case 'approve-provider-request':
|
case 'approve-provider-request':
|
||||||
@ -153,11 +153,14 @@ function listenForProviderRequest () {
|
|||||||
case 'reject-provider-request':
|
case 'reject-provider-request':
|
||||||
injectScript(`window.dispatchEvent(new CustomEvent('ethereumprovider', { detail: { error: 'User rejected provider access' }}))`)
|
injectScript(`window.dispatchEvent(new CustomEvent('ethereumprovider', { detail: { error: 'User rejected provider access' }}))`)
|
||||||
break
|
break
|
||||||
case 'answer-status-request':
|
case 'answer-is-approved':
|
||||||
injectScript(`window.dispatchEvent(new CustomEvent('ethereumproviderstatus', { detail: { isEnabled: ${isEnabled}}}))`)
|
injectScript(`window.dispatchEvent(new CustomEvent('ethereumisapproved', { detail: { isApproved: ${isApproved}}}))`)
|
||||||
break
|
break
|
||||||
case 'answer-unlock-request':
|
case 'answer-is-unlocked':
|
||||||
injectScript(`window.dispatchEvent(new CustomEvent('metamaskunlockstatus', { detail: { isUnlocked: ${isUnlocked}}}))`)
|
injectScript(`window.dispatchEvent(new CustomEvent('metamaskisunlocked', { detail: { isUnlocked: ${isUnlocked}}}))`)
|
||||||
|
break
|
||||||
|
case 'metamask-set-locked':
|
||||||
|
injectScript(`window.dispatchEvent(new CustomEvent('metamasksetlocked', { detail: {}}))`)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -24,11 +24,11 @@ class ProviderApprovalController {
|
|||||||
case 'init-provider-request':
|
case 'init-provider-request':
|
||||||
this.handleProviderRequest(origin)
|
this.handleProviderRequest(origin)
|
||||||
break
|
break
|
||||||
case 'init-status-request':
|
case 'init-is-approved':
|
||||||
this.handleProviderStatusRequest(origin)
|
this.handleIsApproved(origin)
|
||||||
break
|
break
|
||||||
case 'init-unlock-request':
|
case 'init-is-unlocked':
|
||||||
this.handleUnlockRequest()
|
this.handleIsUnlocked()
|
||||||
break
|
break
|
||||||
case 'init-privacy-request':
|
case 'init-privacy-request':
|
||||||
this.handlePrivacyStatusRequest()
|
this.handlePrivacyStatusRequest()
|
||||||
@ -44,7 +44,8 @@ class ProviderApprovalController {
|
|||||||
*/
|
*/
|
||||||
handleProviderRequest (origin) {
|
handleProviderRequest (origin) {
|
||||||
this.store.updateState({ providerRequests: [{ origin }] })
|
this.store.updateState({ providerRequests: [{ origin }] })
|
||||||
if (this.isApproved(origin)) {
|
const isUnlocked = this.keyringController.memStore.getState().isUnlocked
|
||||||
|
if (isUnlocked && this.isApproved(origin)) {
|
||||||
this.approveProviderRequest(origin)
|
this.approveProviderRequest(origin)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -56,14 +57,14 @@ class ProviderApprovalController {
|
|||||||
*
|
*
|
||||||
* @param {string} origin - Origin of the window requesting provider status
|
* @param {string} origin - Origin of the window requesting provider status
|
||||||
*/
|
*/
|
||||||
async handleProviderStatusRequest (origin) {
|
async handleIsApproved (origin) {
|
||||||
const isEnabled = this.isApproved(origin)
|
const isApproved = this.isApproved(origin)
|
||||||
this.platform && this.platform.sendMessage({ action: 'answer-status-request', isEnabled }, { active: true })
|
this.platform && this.platform.sendMessage({ action: 'answer-is-approved', isApproved }, { active: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
handleUnlockRequest () {
|
handleIsUnlocked () {
|
||||||
const isUnlocked = this.keyringController.memStore.getState().isUnlocked
|
const isUnlocked = this.keyringController.memStore.getState().isUnlocked
|
||||||
this.platform && this.platform.sendMessage({ action: 'answer-unlock-request', isUnlocked }, { active: true })
|
this.platform && this.platform.sendMessage({ action: 'answer-is-unlocked', isUnlocked }, { active: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
handlePrivacyStatusRequest () {
|
handlePrivacyStatusRequest () {
|
||||||
@ -119,6 +120,10 @@ class ProviderApprovalController {
|
|||||||
const privacyMode = this.preferencesController.getFeatureFlags().privacyMode
|
const privacyMode = this.preferencesController.getFeatureFlags().privacyMode
|
||||||
return !privacyMode || this.approvedOrigins[origin]
|
return !privacyMode || this.approvedOrigins[origin]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setLocked () {
|
||||||
|
this.platform.sendMessage({ action: 'metamask-set-locked' })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ProviderApprovalController
|
module.exports = ProviderApprovalController
|
||||||
|
@ -33,6 +33,10 @@ inpageProvider.setMaxListeners(100)
|
|||||||
var isEnabled = false
|
var isEnabled = false
|
||||||
var warned = false
|
var warned = false
|
||||||
|
|
||||||
|
window.addEventListener('metamasksetlocked', () => {
|
||||||
|
isEnabled = false
|
||||||
|
})
|
||||||
|
|
||||||
// augment the provider with its enable method
|
// augment the provider with its enable method
|
||||||
inpageProvider.enable = function () {
|
inpageProvider.enable = function () {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@ -91,14 +95,14 @@ inpageProvider._metamask = new Proxy({
|
|||||||
*/
|
*/
|
||||||
isApproved: function() {
|
isApproved: function() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.addEventListener('ethereumproviderstatus', ({ detail }) => {
|
window.addEventListener('ethereumisapproved', ({ detail }) => {
|
||||||
if (typeof detail.error !== 'undefined') {
|
if (typeof detail.error !== 'undefined') {
|
||||||
reject(detail.error)
|
reject(detail.error)
|
||||||
} else {
|
} else {
|
||||||
resolve(!!detail.isEnabled)
|
resolve(!!detail.isApproved)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
window.postMessage({ type: 'ETHEREUM_QUERY_STATUS' }, '*')
|
window.postMessage({ type: 'ETHEREUM_IS_APPROVED' }, '*')
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -109,14 +113,14 @@ inpageProvider._metamask = new Proxy({
|
|||||||
*/
|
*/
|
||||||
isUnlocked: function () {
|
isUnlocked: function () {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.addEventListener('metamaskunlockstatus', ({ detail }) => {
|
window.addEventListener('metamaskisunlocked', ({ detail }) => {
|
||||||
if (typeof detail.error !== 'undefined') {
|
if (typeof detail.error !== 'undefined') {
|
||||||
reject(detail.error)
|
reject(detail.error)
|
||||||
} else {
|
} else {
|
||||||
resolve(!!detail.isUnlocked)
|
resolve(!!detail.isUnlocked)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
window.postMessage({ type: 'METAMASK_UNLOCK_STATUS' }, '*')
|
window.postMessage({ type: 'METAMASK_IS_UNLOCKED' }, '*')
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
|
@ -422,7 +422,7 @@ module.exports = class MetamaskController extends EventEmitter {
|
|||||||
setAddressBook: nodeify(addressBookController.setAddressBook, addressBookController),
|
setAddressBook: nodeify(addressBookController.setAddressBook, addressBookController),
|
||||||
|
|
||||||
// KeyringController
|
// KeyringController
|
||||||
setLocked: nodeify(keyringController.setLocked, keyringController),
|
setLocked: nodeify(this.setLocked, this),
|
||||||
createNewVaultAndKeychain: nodeify(this.createNewVaultAndKeychain, this),
|
createNewVaultAndKeychain: nodeify(this.createNewVaultAndKeychain, this),
|
||||||
createNewVaultAndRestore: nodeify(this.createNewVaultAndRestore, this),
|
createNewVaultAndRestore: nodeify(this.createNewVaultAndRestore, this),
|
||||||
addNewKeyring: nodeify(keyringController.addNewKeyring, keyringController),
|
addNewKeyring: nodeify(keyringController.addNewKeyring, keyringController),
|
||||||
@ -1576,4 +1576,9 @@ module.exports = class MetamaskController extends EventEmitter {
|
|||||||
whitelistPhishingDomain (hostname) {
|
whitelistPhishingDomain (hostname) {
|
||||||
return this.blacklistController.whitelistDomain(hostname)
|
return this.blacklistController.whitelistDomain(hostname)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setLocked() {
|
||||||
|
this.providerApprovalController.setLocked()
|
||||||
|
return this.keyringController.setLocked()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user