about summary refs log tree commit diff stats
path: root/background.js
diff options
context:
space:
mode:
authorSimonBrazell <simon@brazell.com.au>2020-02-01 14:17:51 +1100
committerSimonBrazell <simon@brazell.com.au>2020-02-01 14:17:51 +1100
commited3941ff7281254ddb9a7cb8acef3bbf4c1d5d0f (patch)
treec704845c829887f37b7ea9df455b5a4f6e4122b3 /background.js
parentFix embedded video redirects (diff)
downloadlibredirect-ed3941ff7281254ddb9a7cb8acef3bbf4c1d5d0f.zip
Add support for Bibliogram redirects
Diffstat (limited to 'background.js')
-rw-r--r--background.js53
1 files changed, 45 insertions, 8 deletions
diff --git a/background.js b/background.js
index 8d6c6b3b..a3284889 100644
--- a/background.js
+++ b/background.js
@@ -1,23 +1,36 @@
 'use strict';
 
 const nitterDefault = 'https://nitter.net';
+const twitterRegex = /((www|mobile)\.)?twitter\.com/;
 const invidiousDefault = 'https://invidio.us';
 const youtubeRegex = /((www|m)\.)?youtube(-nocookie)?\.com/;
-const twitterRegex = /((www|mobile)\.)?twitter\.com/;
-const pathRegex = /^https?:\/\/[^\/]+([\S\s]*)/;
+const bibliogramDefault = 'https://bibliogram.art';
+const instagramRegex = /((www|about|help)\.)?instagram\.com/;
+const instagramPathsRegex = /(\/a|\/admin|\/api|\/favicon.ico|\/static|\/imageproxy|\/p|\/u|\/developer|\/about|\/legal|\/explore|\/director)/;
 
 let nitterInstance;
 let invidiousInstance;
+let bibliogramInstance;
 let disableNitter;
 let disableInvidious;
+let disableBibliogram;
 
 chrome.storage.sync.get(
-  ['disableNitter', 'disableInvidious', 'nitterInstance', 'invidiousInstance'],
+  [
+    'nitterInstance',
+    'invidiousInstance',
+    'bibliogramInstance',
+    'disableNitter',
+    'disableInvidious',
+    'disableBibliogram'
+  ],
   result => {
     disableNitter = result.disableNitter;
     disableInvidious = result.disableInvidious;
+    disableBibliogram = result.disableBibliogram;
     nitterInstance = result.nitterInstance || nitterDefault;
     invidiousInstance = result.invidiousInstance || invidiousDefault;
+    bibliogramInstance = result.bibliogramInstance || bibliogramDefault;
   }
 );
 
@@ -28,32 +41,56 @@ chrome.storage.onChanged.addListener(changes => {
   if ('invidiousInstance' in changes) {
     invidiousInstance = changes.invidiousInstance.newValue || invidiousDefault;
   }
+  if ('bibliogramInstance' in changes) {
+    bibliogramInstance = changes.bibliogramInstance.newValue || bibliogramDefault;
+  }
   if ('disableNitter' in changes) {
     disableNitter = changes.disableNitter.newValue;
   }
   if ('disableInvidious' in changes) {
     disableInvidious = changes.disableInvidious.newValue;
   }
+  if ('disableBibliogram' in changes) {
+    disableBibliogram = changes.disableBibliogram.newValue;
+  }
 });
 
+function redirectBibliogram(url) {
+  if (url.pathname === '/' || url.pathname.match(instagramPathsRegex)) {
+    return bibliogramInstance + url.pathname;
+  } else {
+    // Redirect user profile requests to '/u/...'
+    return `${bibliogramInstance}/u${url.pathname}`;
+  }
+}
+
 chrome.webRequest.onBeforeRequest.addListener(
   details => {
+    const url = new URL(details.url);
     let redirect;
-    if (details.url.match(youtubeRegex)) {
+    if (url.host.match(youtubeRegex)) {
       if (!disableInvidious) {
         redirect = {
-          redirectUrl: invidiousInstance + details.url.match(pathRegex)[1]
+          redirectUrl: invidiousInstance + url.pathname
         };
       }
-    } else if (details.url.match(twitterRegex)) {
+    } else if (url.host.match(twitterRegex)) {
       if (!disableNitter) {
         redirect = {
-          redirectUrl: nitterInstance + details.url.match(pathRegex)[1]
+          redirectUrl: nitterInstance + url.pathname
+        };
+      }
+    } else if (url.host.match(instagramRegex)) {
+      if (!disableBibliogram) {
+        redirect = {
+          redirectUrl: redirectBibliogram(url)
         };
       }
     }
     if (redirect) {
-      console.log('Redirecting', `"${details.url}"`, '=>', `"${redirect.redirectUrl}"`);
+      console.log(
+        'Redirecting', `"${url.host}"`, '=>', `"${redirect.redirectUrl}"`
+      );
       console.log('Details', details);
     }
     return redirect;