diff options
author | SimonBrazell <simon@brazell.com.au> | 2020-06-08 11:50:12 +1000 |
---|---|---|
committer | SimonBrazell <simon@brazell.com.au> | 2020-06-08 11:50:12 +1000 |
commit | 0892d0c30ac973b2f01eb678af88f4dd0fc8531b (patch) | |
tree | 065a12c57c0aedc09636fef49e4f9801ae1fb776 /assets | |
parent | Closes #38, fixes #61, closes #64 (diff) | |
download | libredirect-0892d0c30ac973b2f01eb678af88f4dd0fc8531b.zip |
Closes #64, closes #38 - Fix whitelist & Twitter `/home` exception
Diffstat (limited to 'assets')
-rw-r--r-- | assets/remove-twitter-sw.js | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/assets/remove-twitter-sw.js b/assets/remove-twitter-sw.js index 37200f1a..d1b30637 100644 --- a/assets/remove-twitter-sw.js +++ b/assets/remove-twitter-sw.js @@ -4,9 +4,23 @@ const nitterDefault = 'https://nitter.net'; let disableNitter; let nitterInstance; +let redirectBypassFlag; +let whitelist; window.browser = window.browser || window.chrome; +function isNotWhitelisted(url) { + return !whitelist.some(regex => (regex.test(url.href))); +} + +function shouldRedirect(url) { + return !redirectBypassFlag && + isNotWhitelisted(url) && + !disableNitter && + url.host !== nitterInstance && + !url.pathname.includes('/home'); +} + function redirectTwitter(url) { if (url.host.split('.')[0] === 'pbs') { return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`; @@ -20,13 +34,16 @@ function redirectTwitter(url) { browser.storage.sync.get( ['nitterInstance', 'disableNitter', 'removeTwitterSW', 'redirectBypassFlag'], (result) => { - const redirectBypassFlag = result.redirectBypassFlag; + redirectBypassFlag = result.redirectBypassFlag; browser.storage.sync.set({ redirectBypassFlag: false }); if (!result.removeTwitterSW) { disableNitter = result.disableNitter; nitterInstance = result.nitterInstance || nitterDefault; + whitelist = result.whitelist ? result.whitelist.map(e => { + return new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')); + }) : []; navigator.serviceWorker.getRegistrations().then(registrations => { for (let registration of registrations) { if (registration.scope === 'https://twitter.com/') { @@ -36,7 +53,7 @@ browser.storage.sync.get( } }); const url = new URL(window.location); - if (!redirectBypassFlag && !disableNitter && url.host !== nitterInstance && !url.pathname.includes('/home')) { + if (shouldRedirect()) { const redirect = redirectTwitter(url); console.info( 'Redirecting', `"${url.href}"`, '=>', `"${redirect}"` |