Initial commit
This commit is contained in:
commit
e90ff542b0
8 changed files with 250 additions and 0 deletions
69
background.js
Normal file
69
background.js
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
let blockingEnabled = true;
|
||||
|
||||
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
||||
if (message.action === 'toggleBlocking') {
|
||||
blockingEnabled = message.enabled;
|
||||
}
|
||||
|
||||
if (message.action === 'getBlockingState') {
|
||||
sendResponse({ action: 'setBlockingState', enabled: blockingEnabled });
|
||||
}
|
||||
});
|
||||
|
||||
chrome.webRequest.onHeadersReceived.addListener(
|
||||
function(details) {
|
||||
if (!blockingEnabled) {
|
||||
return { cancel: false };
|
||||
}
|
||||
|
||||
// These are Cloudflare's headers, taken from here:
|
||||
// https://developers.cloudflare.com/fundamentals/reference/http-headers/
|
||||
const cloudflare_headers = [
|
||||
'cf-connecting-ip',
|
||||
'cf-connecting-ipv6',
|
||||
'cf-ew-via',
|
||||
'cf-Pseudo-ipv4',
|
||||
'cf-ray',
|
||||
'cf-ipcountry',
|
||||
'cf-visitor',
|
||||
'cf-worker'
|
||||
];
|
||||
// You might want capture all headers prefixed with "cf-":
|
||||
// const cf_header = details.responseHeaders.find(header =>
|
||||
// header.name.toLowerCase().startsWith('cf-')
|
||||
// );
|
||||
|
||||
const cf_header = details.responseHeaders.find(header =>
|
||||
cloudflare_headers.includes(header.name.toLowerCase())
|
||||
);
|
||||
|
||||
if (cf_header) {
|
||||
console.log('Cloudflare header found:', cf_header);
|
||||
|
||||
const query_params = new URLSearchParams({
|
||||
name: cf_header.name,
|
||||
value: cf_header.value,
|
||||
url: details.url
|
||||
}).toString();
|
||||
|
||||
/*
|
||||
* It would be cool to pass the tab URL in the query params, but how?
|
||||
* When accessing chrome.tabs here, the active tab URL is "about:newtab".
|
||||
* Because we block the request immediately and the tab URL state doesn't
|
||||
* never update to the URL we tried to access. I'd like to pass the URL
|
||||
* to the web.archive.org/tab_url_here in blocked.html.
|
||||
* Email contact@libroot.org if you know a solution!
|
||||
*/
|
||||
|
||||
// Redirect to our custom blocked.html page
|
||||
const url = chrome.runtime.getURL('blocked.html') + '?' + query_params;
|
||||
console.log('Redirecting to blocked page:', url);
|
||||
chrome.tabs.update(details.tabId, { url: url });
|
||||
|
||||
// Block the request, reject Cloudflare!
|
||||
return { cancel: true };
|
||||
}
|
||||
},
|
||||
{ urls: ['<all_urls>'] },
|
||||
['blocking', 'responseHeaders']
|
||||
);
|
||||
Loading…
Add table
Add a link
Reference in a new issue