mirror of
https://0xacab.org/dCF/deCloudflare.git
synced 2025-02-08 07:56:11 -05:00
35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
const Cc = Components.classes,
|
|
Ci = Components.interfaces;
|
|
function ignoreCF(h) {
|
|
return /cloudflare((|support|warp)|\-(dns|free|ipfs|quic))\.com$/.test(h) ? true : false;
|
|
}
|
|
let knownCF = [];
|
|
let CFBlocking = {
|
|
observe: function (subject, topic, data) {
|
|
let httpChl = subject.QueryInterface(Ci.nsIHttpChannel),
|
|
reqURL = subject.URI.spec;
|
|
if (reqURL.indexOf('http') === 0 && reqURL.indexOf('.archive.org/') === -1) {
|
|
let hostN = (new URL(reqURL)).hostname;
|
|
if (topic == 'http-on-modify-request') {
|
|
if (knownCF.includes(hostN)) {
|
|
httpChl.cancel(Cr.NS_BINDING_ABORTED);
|
|
}
|
|
}
|
|
if (topic == 'http-on-examine-response') {
|
|
let rayid = '';
|
|
try {
|
|
rayid = httpChl.getResponseHeader('cf-ray');
|
|
} catch (e) {}
|
|
if (rayid.length > 4 && !ignoreCF(hostN)) {
|
|
if (!knownCF.includes(hostN)) {
|
|
knownCF.push(hostN);
|
|
}
|
|
httpChl.cancel(Cr.NS_BINDING_ABORTED);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
let OBS = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
|
|
OBS.addObserver(CFBlocking, 'http-on-modify-request', false);
|
|
OBS.addObserver(CFBlocking, 'http-on-examine-response', false); |