From 0892d0c30ac973b2f01eb678af88f4dd0fc8531b Mon Sep 17 00:00:00 2001 From: SimonBrazell Date: Mon, 8 Jun 2020 11:50:12 +1000 Subject: Closes #64, closes #38 - Fix whitelist & Twitter `/home` exception --- assets/remove-twitter-sw.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'assets') 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}"` -- cgit 1.4.1