diff options
author | kumavis <aaron@kumavis.me> | 2017-08-03 06:54:59 +0800 |
---|---|---|
committer | kumavis <aaron@kumavis.me> | 2017-08-03 06:54:59 +0800 |
commit | 8c6f01b91094564df59d6d95b6f43b811e711824 (patch) | |
tree | 19ed66e8fd54b4324d8e5750de061c6562ace19b /app/scripts/controllers/blacklist.js | |
parent | ecaa235b5e3331defab75dad72593951fdf37790 (diff) | |
download | tangerine-wallet-browser-8c6f01b91094564df59d6d95b6f43b811e711824.tar.gz 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.js | 50 |
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 |