diff options
author | ManeraKai <manerakai@protonmail.com> | 2022-06-11 13:03:46 +0300 |
---|---|---|
committer | ManeraKai <manerakai@protonmail.com> | 2022-06-11 13:03:46 +0300 |
commit | 0ab646ac68c2b76fb2778b9e2a8c3caf989fb6b4 (patch) | |
tree | 50ab17f82a9994e1e2e3167ec444b706414b32ab /src/assets/javascripts | |
parent | Fixing a typo in cookies #323 (diff) | |
download | libredirect-0ab646ac68c2b76fb2778b9e2a8c3caf989fb6b4.zip |
Fixed content-security-policy for youtube #279
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r-- | src/assets/javascripts/youtube/youtube.js | 59 |
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 }; |