aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/controllers/blacklist.js
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2017-08-03 06:54:59 +0800
committerkumavis <aaron@kumavis.me>2017-08-03 06:54:59 +0800
commit8c6f01b91094564df59d6d95b6f43b811e711824 (patch)
tree19ed66e8fd54b4324d8e5750de061c6562ace19b /app/scripts/controllers/blacklist.js
parentecaa235b5e3331defab75dad72593951fdf37790 (diff)
downloadtangerine-wallet-browser-8c6f01b91094564df59d6d95b6f43b811e711824.tar
tangerine-wallet-browser-8c6f01b91094564df59d6d95b6f43b811e711824.tar.gz
tangerine-wallet-browser-8c6f01b91094564df59d6d95b6f43b811e711824.tar.bz2
tangerine-wallet-browser-8c6f01b91094564df59d6d95b6f43b811e711824.tar.lz
tangerine-wallet-browser-8c6f01b91094564df59d6d95b6f43b811e711824.tar.xz
tangerine-wallet-browser-8c6f01b91094564df59d6d95b6f43b811e711824.tar.zst
tangerine-wallet-browser-8c6f01b91094564df59d6d95b6f43b811e711824.zip
blacklist controller - breakout from metamask and infura controllers
Diffstat (limited to 'app/scripts/controllers/blacklist.js')
-rw-r--r--app/scripts/controllers/blacklist.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/app/scripts/controllers/blacklist.js b/app/scripts/controllers/blacklist.js
new file mode 100644
index 000000000..11e26d5b2
--- /dev/null
+++ b/app/scripts/controllers/blacklist.js
@@ -0,0 +1,50 @@
+const ObservableStore = require('obs-store')
+const extend = require('xtend')
+const communityBlacklistedDomains = require('etheraddresslookup/blacklists/domains.json')
+const communityWhitelistedDomains = require('etheraddresslookup/whitelists/domains.json')
+const checkForPhishing = require('../lib/is-phish')
+
+// compute phishing lists
+const PHISHING_BLACKLIST = communityBlacklistedDomains.concat(['metamask.com'])
+const PHISHING_WHITELIST = communityWhitelistedDomains.concat(['metamask.io', 'www.metamask.io'])
+const PHISHING_FUZZYLIST = ['myetherwallet', 'myetheroll', 'ledgerwallet', 'metamask']
+// every ten minutes
+const POLLING_INTERVAL = 10 * 60 * 1000
+
+class BlacklistController {
+
+ constructor (opts = {}) {
+ const initState = extend({
+ phishing: PHISHING_BLACKLIST,
+ }, opts.initState)
+ this.store = new ObservableStore(initState)
+ // polling references
+ this._phishingUpdateIntervalRef = null
+ }
+
+ //
+ // PUBLIC METHODS
+ //
+
+ checkForPhishing (hostname) {
+ if (!hostname) return false
+ const { blacklist } = this.store.getState()
+ return checkForPhishing({ hostname, blacklist, whitelist: PHISHING_WHITELIST, fuzzylist: PHISHING_FUZZYLIST })
+ }
+
+ async updatePhishingList () {
+ const response = await fetch('https://api.infura.io/v1/blacklist')
+ const phishing = await response.json()
+ this.store.updateState({ phishing })
+ return phishing
+ }
+
+ scheduleUpdates () {
+ if (this._phishingUpdateIntervalRef) return
+ this._phishingUpdateIntervalRef = setInterval(() => {
+ this.updatePhishingList()
+ }, POLLING_INTERVAL)
+ }
+}
+
+module.exports = BlacklistController