about summary refs log tree commit diff stats
path: root/src/assets/javascripts
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-06-11 13:03:46 +0300
committerManeraKai <manerakai@protonmail.com>2022-06-11 13:03:46 +0300
commit0ab646ac68c2b76fb2778b9e2a8c3caf989fb6b4 (patch)
tree50ab17f82a9994e1e2e3167ec444b706414b32ab /src/assets/javascripts
parentFixing a typo in cookies #323 (diff)
downloadlibredirect-0ab646ac68c2b76fb2778b9e2a8c3caf989fb6b4.zip
Fixed content-security-policy for youtube #279
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r--src/assets/javascripts/youtube/youtube.js59
1 files changed, 47 insertions, 12 deletions
diff --git a/src/assets/javascripts/youtube/youtube.js b/src/assets/javascripts/youtube/youtube.js
index 61e73fdf..9caf6752 100644
--- a/src/assets/javascripts/youtube/youtube.js
+++ b/src/assets/javascripts/youtube/youtube.js
@@ -420,21 +420,56 @@ function pastePipedMaterialLocalStorage() {
   })
 }
 
-
 function removeXFrameOptions(e) {
-  if (e.type != 'sub_frame') return;
-  const url = new URL(e.url);
-  const protocolHost = utils.protocolHost(url);
-  if (!all().includes(protocolHost)) return;
   let isChanged = false;
-  for (const i in e.responseHeaders) {
-    if (e.responseHeaders[i].name == 'x-frame-options') {
-      e.responseHeaders.splice(i, 1);
-      isChanged = true;
+
+  if (e.type == 'main_frame') {
+    for (const i in e.responseHeaders) {
+      if (e.responseHeaders[i].name == 'content-security-policy') {
+        let instancesList;
+        if (youtubeFrontend == 'invidious') {
+          if (youtubeProtocol == 'normal') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects];
+          else if (youtubeProtocol == 'tor') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects];
+        }
+        else if (youtubeFrontend == 'piped') {
+          if (youtubeProtocol == 'normal') instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects];
+          else if (youtubeProtocol == 'tor') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects];
+        }
+        else if (youtubeFrontend == 'pipedMaterial') {
+          if (youtubeProtocol == 'normal') instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects];
+          else if (youtubeProtocol == 'tor') instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects];
+        }
+        let securityPolicyList = e.responseHeaders[i].value.split(';');
+        for (const i in securityPolicyList) securityPolicyList[i] = securityPolicyList[i].trim();
+
+        let newSecurity = '';
+        for (const item of securityPolicyList) {
+          if (item.trim() == '') continue
+          console.log('item', item);
+          let [, key, vals] = item.match(/([a-z-]{0,}) (.*)/);
+          if (key == 'frame-src') vals = vals + ' ' + instancesList.join(' ');
+          newSecurity += key + ' ' + vals + '; ';
+        }
+
+        e.responseHeaders[i].value = newSecurity;
+        isChanged = true;
+      }
     }
-    else if (e.responseHeaders[i].name == 'content-security-policy') {
-      e.responseHeaders.splice(i, 1);
-      isChanged = true;
+    if (isChanged) return { responseHeaders: e.responseHeaders };
+  }
+  else if (e.type == 'sub_frame') {
+    const url = new URL(e.url);
+    const protocolHost = utils.protocolHost(url);
+    if (!all().includes(protocolHost)) return;
+    for (const i in e.responseHeaders) {
+      if (e.responseHeaders[i].name == 'x-frame-options') {
+        e.responseHeaders.splice(i, 1);
+        isChanged = true;
+      }
+      else if (e.responseHeaders[i].name == 'content-security-policy') {
+        e.responseHeaders.splice(i, 1);
+        isChanged = true;
+      }
     }
   }
   if (isChanged) return { responseHeaders: e.responseHeaders };