aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Finlay <dan@danfinlay.com>2017-07-27 03:10:42 +0800
committerDan Finlay <dan@danfinlay.com>2017-07-27 03:27:16 +0800
commit3d8ebf2265d167923f3b913bac3b9cc4d37fa052 (patch)
tree7e8701eac32f1d5c72d0e516cd0af52aa358df8a
parent0deb617d8f879b9a05c4581f16f5790cafa9789a (diff)
downloadtangerine-wallet-browser-3d8ebf2265d167923f3b913bac3b9cc4d37fa052.tar.gz
tangerine-wallet-browser-3d8ebf2265d167923f3b913bac3b9cc4d37fa052.tar.zst
tangerine-wallet-browser-3d8ebf2265d167923f3b913bac3b9cc4d37fa052.zip
Begin implementing live-updating blacklist, not working yet
-rw-r--r--app/scripts/background.js27
-rw-r--r--app/scripts/blacklister.js19
-rw-r--r--app/scripts/controllers/infura.js14
3 files changed, 52 insertions, 8 deletions
diff --git a/app/scripts/background.js b/app/scripts/background.js
index e8987394f..c9505b237 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -90,6 +90,10 @@ function setupController (initState) {
extension.runtime.onConnect.addListener(connectRemote)
function connectRemote (remotePort) {
+ if (remotePort.name === 'blacklister') {
+ return setupBlacklist(connectRemote)
+ }
+
var isMetaMaskInternalProcess = remotePort.name === 'popup' || remotePort.name === 'notification'
var portStream = new PortStream(remotePort)
if (isMetaMaskInternalProcess) {
@@ -135,6 +139,29 @@ function setupController (initState) {
return Promise.resolve()
}
+// Listen for new pages and return if blacklisted:
+function setupBlacklist (port) {
+ console.log('Blacklist connection established')
+ const handler = handleNewPageLoad.bind(port)
+ port.onMessage.addListener(handler)
+ setTimeout(() => {
+ port.onMessage.removeListener(handler)
+ }, 30000)
+}
+
+function handleNewPageLoad (message) {
+ const { pageLoaded } = message
+ console.log('blaclist message received', message.pageLoaded)
+ if (!pageLoaded || !global.metamaskController) return
+
+ const state = global.metamaskController.getState()
+ const { blacklist } = state.metamask
+
+ if (blacklist && blacklist.includes(pageLoaded)) {
+ this.postMessage({ 'blacklist': pageLoaded })
+ }
+}
+
//
// Etc...
//
diff --git a/app/scripts/blacklister.js b/app/scripts/blacklister.js
index a45265a75..f5572c11a 100644
--- a/app/scripts/blacklister.js
+++ b/app/scripts/blacklister.js
@@ -1,13 +1,16 @@
-const blacklistedDomains = require('etheraddresslookup/blacklists/domains.json')
+const extension = require('extensionizer')
+console.log('blacklister content script loaded.')
-function detectBlacklistedDomain() {
- var strCurrentTab = window.location.hostname
- if (blacklistedDomains && blacklistedDomains.includes(strCurrentTab)) {
+const port = extension.runtime.connect({ name: 'blacklister' })
+port.postMessage({ 'pageLoaded': window.location.hostname })
+port.onMessage.addListener(redirectIfBlacklisted)
+
+function redirectIfBlacklisted (response) {
+ const { blacklist } = response
+ console.log('blacklister contentscript received blacklist response')
+ const host = window.location.hostname
+ if (blacklist && blacklist === host) {
window.location.href = 'https://metamask.io/phishing.html'
}
}
-window.addEventListener('load', function() {
- detectBlacklistedDomain()
-})
-
diff --git a/app/scripts/controllers/infura.js b/app/scripts/controllers/infura.js
index b34b0bc03..97b2ab7e3 100644
--- a/app/scripts/controllers/infura.js
+++ b/app/scripts/controllers/infura.js
@@ -1,5 +1,6 @@
const ObservableStore = require('obs-store')
const extend = require('xtend')
+const recentBlacklist = require('etheraddresslookup/blacklists/domains.json')
// every ten minutes
const POLLING_INTERVAL = 300000
@@ -9,6 +10,7 @@ class InfuraController {
constructor (opts = {}) {
const initState = extend({
infuraNetworkStatus: {},
+ blacklist: recentBlacklist,
}, opts.initState)
this.store = new ObservableStore(initState)
}
@@ -30,12 +32,24 @@ class InfuraController {
})
}
+ updateLocalBlacklist () {
+ return fetch('https://api.infura.io/v1/blacklist')
+ .then(response => response.json())
+ .then((parsedResponse) => {
+ this.store.updateState({
+ blacklist: parsedResponse,
+ })
+ return parsedResponse
+ })
+ }
+
scheduleInfuraNetworkCheck () {
if (this.conversionInterval) {
clearInterval(this.conversionInterval)
}
this.conversionInterval = setInterval(() => {
this.checkInfuraNetworkStatus()
+ this.updateLocalBlacklist()
}, POLLING_INTERVAL)
}
}