505 lines
14 KiB
JavaScript
505 lines
14 KiB
JavaScript
/**
|
|
* Interceptor
|
|
* Belongs to Decentraleyes.
|
|
*
|
|
* @author Thomas Rientjes
|
|
* @since 2016-04-06
|
|
* @license MPL 2.0
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* Interceptor
|
|
*/
|
|
|
|
var interceptor = {};
|
|
|
|
/**
|
|
* Public Methods
|
|
*/
|
|
|
|
interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
|
|
|
|
let validCandidate, tabDomain, targetDetails, targetPath;
|
|
|
|
validCandidate = requestAnalyzer.isValidCandidate(requestDetails, tab);
|
|
|
|
if (!validCandidate) {
|
|
|
|
return {
|
|
'cancel': false
|
|
};
|
|
}
|
|
|
|
tabDomain = helpers.extractDomainFromUrl(tab.url, true);
|
|
|
|
if (tabDomain === null) {
|
|
tabDomain = Address.EXAMPLE;
|
|
}
|
|
|
|
if (requestDetails.type === WebRequestType.XHR) {
|
|
|
|
if (tabDomain !== interceptor.xhrTestDomain) {
|
|
return interceptor._handleMissingCandidate(requestDetails.url);
|
|
}
|
|
}
|
|
|
|
if (interceptor.taintedDomains[tabDomain] || (/yandex\./).test(tabDomain) ||
|
|
(/wickedlocal\.com/).test(tabDomain)) {
|
|
|
|
return interceptor._handleMissingCandidate(requestDetails.url, true);
|
|
}
|
|
|
|
targetDetails = requestAnalyzer.getLocalTarget(requestDetails);
|
|
targetPath = targetDetails.path;
|
|
|
|
if (!targetPath) {
|
|
return interceptor._handleMissingCandidate(requestDetails.url);
|
|
}
|
|
|
|
if (!files.active[targetPath]) {
|
|
return interceptor._handleMissingCandidate(requestDetails.url);
|
|
}
|
|
|
|
stateManager.requests[requestDetails.requestId] = {
|
|
tabIdentifier, targetDetails
|
|
};
|
|
|
|
return {
|
|
'redirectUrl': chrome.extension.getURL(targetPath + fileGuard.secret)
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Private Methods
|
|
*/
|
|
|
|
interceptor._handleMissingCandidate = function (requestUrl, preserveUrl) {
|
|
|
|
let requestUrlSegments;
|
|
|
|
if (interceptor.blockMissing === true) {
|
|
|
|
return {
|
|
'cancel': true
|
|
};
|
|
}
|
|
|
|
if (preserveUrl === true) {
|
|
|
|
return {
|
|
'cancel': false
|
|
};
|
|
}
|
|
|
|
requestUrlSegments = new URL(requestUrl);
|
|
|
|
if (requestUrlSegments.protocol === Address.HTTP) {
|
|
|
|
requestUrlSegments.protocol = Address.HTTPS;
|
|
requestUrl = requestUrlSegments.toString();
|
|
|
|
return {
|
|
'redirectUrl': requestUrl
|
|
};
|
|
|
|
} else {
|
|
|
|
return {
|
|
'cancel': false
|
|
};
|
|
}
|
|
};
|
|
|
|
interceptor._handleStorageChanged = function (changes) {
|
|
|
|
if (Setting.XHR_TEST_DOMAIN in changes) {
|
|
interceptor.xhrTestDomain = changes.xhrTestDomain.newValue;
|
|
}
|
|
|
|
if (Setting.BLOCK_MISSING in changes) {
|
|
interceptor.blockMissing = changes.blockMissing.newValue;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Initializations
|
|
*/
|
|
|
|
// Temporary list of tainted domains.
|
|
interceptor.taintedDomains = {
|
|
'10fastfingers.com': true,
|
|
'ack.net': true,
|
|
'adelnews.com': true,
|
|
'advocatepress.com': true,
|
|
'aledotimesrecord.com': true,
|
|
'alicetx.com': true,
|
|
'amarillo.com': true,
|
|
'amestrib.com': true,
|
|
'amtrib.com': true,
|
|
'apalachtimes.com': true,
|
|
'ardmoreite.com': true,
|
|
'augustachronicle.com': true,
|
|
'auroraadvertiser.net': true,
|
|
'barnesville-enterprise.com': true,
|
|
'barnstablepatriot.com': true,
|
|
'bcdemocratonline.com': true,
|
|
'beauregarddailynews.net': true,
|
|
'blog.datawrapper.de': true,
|
|
'blueridgenow.com': true,
|
|
'blufftontoday.com': true,
|
|
'boonevilledemocrat.com': true,
|
|
'boonvilledailynews.com': true,
|
|
[`br.span${'kb'}ang.com`]: true,
|
|
'brownwoodtx.com': true,
|
|
'buckscountycouriertimes.com': true,
|
|
'bundleofholding.com': true,
|
|
'burlingtoncountytimes.com': true,
|
|
'butlercountytimesgazette.com': true,
|
|
'cambridgechron.com': true,
|
|
'cantondailyledger.com': true,
|
|
'cantonrep.com': true,
|
|
'capecodtimes.com': true,
|
|
'captcha.realtek.com': true,
|
|
'carmitimes.com': true,
|
|
'cdnjs.com': true,
|
|
'cellmapper.net': true,
|
|
'charlestonexpress.com': true,
|
|
'cheboygannews.com': true,
|
|
'chieftain.com': true,
|
|
'chillicothenews.com': true,
|
|
'chillicothetimesbulletin.com': true,
|
|
'chipleypaper.com': true,
|
|
'chronicle-express.com': true,
|
|
'cjonline.com': true,
|
|
'code.world': true,
|
|
'columbiadailyherald.com': true,
|
|
'columbiatribune.com': true,
|
|
'courier-tribune.com': true,
|
|
'creativecommons.org': true,
|
|
'crestviewbulletin.com': true,
|
|
'crookstontimes.com': true,
|
|
'daily-jeff.com': true,
|
|
'dailycomet.com': true,
|
|
'dailycommercial.com': true,
|
|
'dansvilleonline.com': true,
|
|
'de.sharkoon.com': true,
|
|
[`de.span${'kb'}ang.com`]: true,
|
|
'devilslakejournal.com': true,
|
|
'dispatch.com': true,
|
|
'docs.servicenow.com': true,
|
|
'dodgeglobe.com': true,
|
|
'donaldsonvillechief.com': true,
|
|
'doverpost.com': true,
|
|
'dropbox.com': true,
|
|
'eastpeoriatimescourier.com': true,
|
|
'echo-news.co.uk': true,
|
|
'echo-pilot.com': true,
|
|
'edinburgreview.com': true,
|
|
'ellwoodcityledger.com': true,
|
|
'en.sharkoon.com': true,
|
|
'enterprisenews.com': true,
|
|
'epey.com': true,
|
|
'es.sharkoon.com': true,
|
|
[`es.span${'kb'}ang.com`]: true,
|
|
'evoice.com': true,
|
|
'examiner-enterprise.com': true,
|
|
'examiner.net': true,
|
|
'fayobserver.com': true,
|
|
'fosters.com': true,
|
|
'fowlertribune.com': true,
|
|
'fr.sharkoon.com': true,
|
|
[`fr.span${'kb'}ang.com`]: true,
|
|
'freebusy.io': true,
|
|
'gadsdentimes.com': true,
|
|
'gainesville.com': true,
|
|
'galesburg.com': true,
|
|
'galvanews.com': true,
|
|
'gastongazette.com': true,
|
|
'gazetadopovo.com.br': true,
|
|
'gctelegram.com': true,
|
|
'gdt.oqlf.gouv.qc.ca': true,
|
|
'geneseorepublic.com': true,
|
|
'glowing-bear.org': true,
|
|
'goerie.com': true,
|
|
'goupstate.com': true,
|
|
'grandlakenews.com': true,
|
|
'granitefallsnews.com': true,
|
|
'greenwooddemocrat.com': true,
|
|
'hamburgreporter.com': true,
|
|
'hannibal.net': true,
|
|
'havenews.com': true,
|
|
'hdnews.net': true,
|
|
'helena-arkansas.com': true,
|
|
'heralddemocrat.com': true,
|
|
'heraldnews.com': true,
|
|
'heraldtribune.com': true,
|
|
'hillsdale.net': true,
|
|
'hockessincommunitynews.com': true,
|
|
'hollandsentinel.com': true,
|
|
'houmatoday.com': true,
|
|
'hsvvoice.com': true,
|
|
'hutchnews.com': true,
|
|
'ico.org.uk': true,
|
|
[`id.span${'kb'}ang.com`]: true,
|
|
'identi.ca': true,
|
|
[`in.span${'kb'}ang.com`]: true,
|
|
'indeonline.com': true,
|
|
'it.sharkoon.com': true,
|
|
[`it.span${'kb'}ang.com`]: true,
|
|
'ja.sharkoon.com': true,
|
|
'jacksonnewspapers.com': true,
|
|
'jacksonville.com': true,
|
|
'jdnews.com': true,
|
|
'journaldemocrat.com': true,
|
|
'journalstandard.com': true,
|
|
[`jp.span${'kb'}ang.com`]: true,
|
|
'kinston.com': true,
|
|
'kiowacountysignal.com': true,
|
|
'kirksvilledailyexpress.com': true,
|
|
'ko.sharkoon.com': true,
|
|
[`la.span${'kb'}ang.com`]: true,
|
|
'labdoor.com': true,
|
|
'lajuntatribunedemocrat.com': true,
|
|
'lakenewsonline.com': true,
|
|
'laziska.com.pl': true,
|
|
'leavenworthtimes.com': true,
|
|
'leesvilledailyleader.com': true,
|
|
'lemon-aid.de': true,
|
|
'lenconnect.com': true,
|
|
'leominsterchamp.com': true,
|
|
'lincolncourier.com': true,
|
|
'linkbostonhomes.com': true,
|
|
'linncountyleader.com': true,
|
|
'lubbockonline.com': true,
|
|
'm-ce.pl': true,
|
|
'manualslib.com': true,
|
|
'mcdonoughvoice.com': true,
|
|
'mcphersonsentinel.com': true,
|
|
'meslieux.paris.fr': true,
|
|
'metrowestdailynews.com': true,
|
|
'mexicoledger.com': true,
|
|
'mgm.gov.tr': true,
|
|
'miamiok.com': true,
|
|
'middletowntranscript.com': true,
|
|
'midlothianmirror.com': true,
|
|
'milfordbeacon.com': true,
|
|
'milforddailynews.com': true,
|
|
'millburysutton.com': true,
|
|
'minigames.mail.ru': true,
|
|
'miniquadtestbench.com': true,
|
|
'moberlymonitor.com': true,
|
|
'mojbytom.pl': true,
|
|
'mojchorzow.pl': true,
|
|
'mojegliwice.pl': true,
|
|
'mojekatowice.pl': true,
|
|
'mojetychy.pl': true,
|
|
'mojmikolow.pl': true,
|
|
'monroecopost.com': true,
|
|
'monroenews.com': true,
|
|
'montenews.com': true,
|
|
'morningsun.net': true,
|
|
'mortontimesnews.com': true,
|
|
'moscowvillager.com': true,
|
|
'mpnnow.com': true,
|
|
[`ms.span${'kb'}ang.com`]: true,
|
|
'mtshastanews.com': true,
|
|
'mytownneo.com': true,
|
|
'ncnewspress.com': true,
|
|
'neagle.com': true,
|
|
'neoshodailynews.com': true,
|
|
'nevadaiowajournal.com': true,
|
|
'newbernsj.com': true,
|
|
'newcomerstown-news.com': true,
|
|
'newlook.dteenergy.com': true,
|
|
'newportri.com': true,
|
|
'news-journalonline.com': true,
|
|
'news-star.com': true,
|
|
'newschief.com': true,
|
|
'newsherald.com': true,
|
|
'newsrepublican.com': true,
|
|
'newstribune.info': true,
|
|
'nhm.ac.uk': true,
|
|
'nl.sharkoon.com': true,
|
|
[`nl.span${'kb'}ang.com`]: true,
|
|
'northneighbornews.com': true,
|
|
'norwichbulletin.com': true,
|
|
'nwfdailynews.com': true,
|
|
'oakridger.com': true,
|
|
'ocala.com': true,
|
|
'ohio.com': true,
|
|
'olneydailymail.com': true,
|
|
'onlineathens.com': true,
|
|
'opavote.com': true,
|
|
'opendata.cbs.nl': true,
|
|
'openweathermap.org': true,
|
|
'oriongazette.com': true,
|
|
'orzesze.com.pl': true,
|
|
'ottawaherald.com': true,
|
|
'palmbeachpost.com': true,
|
|
'paris-express.com': true,
|
|
'patriotledger.com': true,
|
|
'pawhuskajournalcapital.com': true,
|
|
'pbcommercial.com': true,
|
|
'pekintimes.com': true,
|
|
'piekaryslaskie.com.pl': true,
|
|
'pjstar.com': true,
|
|
'pl.sharkoon.com': true,
|
|
[`pl.span${'kb'}ang.com`]: true,
|
|
'poconorecord.com': true,
|
|
'poedb.tw': true,
|
|
'pontiacdailyleader.com': true,
|
|
'postsouth.com': true,
|
|
'pratttribune.com': true,
|
|
'pressargus.com': true,
|
|
'pressmentor.com': true,
|
|
'progress-index.com': true,
|
|
'prosperpressnews.com': true,
|
|
'providencejournal.com': true,
|
|
'pt.sharkoon.com': true,
|
|
[`pt.span${'kb'}ang.com`]: true,
|
|
'pyskowice.com.pl': true,
|
|
'qwertee.com': true,
|
|
'record-courier.com': true,
|
|
'recordnet.com': true,
|
|
'recordonline.com': true,
|
|
'recordstar.com': true,
|
|
'redwoodfallsgazette.com': true,
|
|
'regentgreymouth.co.nz': true,
|
|
'registerguard.com': true,
|
|
'report-uri.io': true,
|
|
'reviewatlas.com': true,
|
|
'ridgecrestca.com': true,
|
|
'rrstar.com': true,
|
|
'ru.sharkoon.com': true,
|
|
[`ru.span${'kb'}ang.com`]: true,
|
|
'rudaslaska.com.pl': true,
|
|
'runnelscountyregister.com': true,
|
|
'rybnicki.com': true,
|
|
'salina.com': true,
|
|
'savannahnow.com': true,
|
|
'scan.nextcloud.com': true,
|
|
'scotthelme.co.uk': true,
|
|
'scsuntimes.com': true,
|
|
[`se.span${'kb'}ang.com`]: true,
|
|
'seacoastonline.com': true,
|
|
'securityheaders.com': true,
|
|
'securityheaders.io': true,
|
|
'sekvoice.com': true,
|
|
'sentinel-standard.com': true,
|
|
'shelbystar.com': true,
|
|
'siemianowice.net.pl': true,
|
|
'signal.org': true,
|
|
'siskiyoudaily.com': true,
|
|
'sj-r.com': true,
|
|
'sjnewsonline.com': true,
|
|
'sleepyeyenews.com': true,
|
|
'somiibo.com': true,
|
|
'sooeveningnews.com': true,
|
|
'sosnowiecki.pl': true,
|
|
'southcoasttoday.com': true,
|
|
[`span${'kb'}ang.com`]: true,
|
|
'srpressgazette.com': true,
|
|
'stadium.se': true,
|
|
'starcourier.com': true,
|
|
'starfl.com': true,
|
|
'starnewsonline.com': true,
|
|
'statesman.com': true,
|
|
'staugustine.com': true,
|
|
'stefansundin.github.io': true,
|
|
'steubencourier.com': true,
|
|
'stjamesnews.com': true,
|
|
'sturgisjournal.com': true,
|
|
'stuttgartdailyleader.com': true,
|
|
'swiony.pl': true,
|
|
'swtimes.com': true,
|
|
'taftmidwaydriller.com': true,
|
|
'tauntongazette.com': true,
|
|
'telegram.com': true,
|
|
'teutopolispress.com': true,
|
|
[`th.span${'kb'}ang.com`]: true,
|
|
'the-daily-record.com': true,
|
|
'the-dispatch.com': true,
|
|
'the-leader.com': true,
|
|
'the-review.com': true,
|
|
'thecarbondalenews.com': true,
|
|
'thedailyreporter.com': true,
|
|
'thedestinlog.com': true,
|
|
'thegraftonnews.com': true,
|
|
'thegurdontimes.com': true,
|
|
'thehawkeye.com': true,
|
|
'theintell.com': true,
|
|
'thekansan.com': true,
|
|
'thelandmark.com': true,
|
|
'theledger.com': true,
|
|
'theperrychief.com': true,
|
|
'therecordherald.com': true,
|
|
'therolladailynews.com': true,
|
|
'thesuburbanite.com': true,
|
|
'thetimesnews.com': true,
|
|
'thisweeknews.com': true,
|
|
'times-gazette.com': true,
|
|
'timescale.com': true,
|
|
'timesonline.com': true,
|
|
'timesreporter.com': true,
|
|
'timestelegram.com': true,
|
|
'topsailadvertiser.com': true,
|
|
'tr.sharkoon.com': true,
|
|
[`tr.span${'kb'}ang.com`]: true,
|
|
'transcend-info.com': true,
|
|
'tuscaloosanews.com': true,
|
|
'udacity.com': true,
|
|
'uticaod.com': true,
|
|
'vanalstyneleader.com': true,
|
|
'vvdailypress.com': true,
|
|
'waltonsun.com': true,
|
|
'washingtontimesreporter.com': true,
|
|
'waxahachietx.com': true,
|
|
'wayneindependent.com': true,
|
|
'waynepost.com': true,
|
|
'weeklycitizen.com': true,
|
|
'wellingtondailynews.com': true,
|
|
'wellsvilledaily.com': true,
|
|
'whitehalljournal.com': true,
|
|
'wodzislaw.com.pl': true,
|
|
'woodfordtimes.com': true,
|
|
'worcestermag.com': true,
|
|
'yadi.sk': true,
|
|
'yelp.com': true,
|
|
'yourglenrosetx.com': true,
|
|
'yourstephenvilletx.com': true,
|
|
'yourvalleyvoice.com': true,
|
|
'yourvotematters.co.uk': true,
|
|
'zabrze.com.pl': true,
|
|
'zh-hant.sharkoon.com': true,
|
|
'zory.com.pl': true
|
|
};
|
|
|
|
interceptor.amountInjected = 0;
|
|
interceptor.xhrTestDomain = Address.DECENTRALEYES;
|
|
interceptor.blockMissing = false;
|
|
|
|
interceptor.relatedSettings = [];
|
|
|
|
interceptor.relatedSettings.push(Setting.AMOUNT_INJECTED);
|
|
interceptor.relatedSettings.push(Setting.XHR_TEST_DOMAIN);
|
|
interceptor.relatedSettings.push(Setting.BLOCK_MISSING);
|
|
|
|
chrome.storage.local.get(interceptor.relatedSettings, function (items) {
|
|
|
|
interceptor.amountInjected = items.amountInjected || 0;
|
|
interceptor.xhrTestDomain = items.xhrTestDomain || Address.DECENTRALEYES;
|
|
interceptor.blockMissing = items.blockMissing || false;
|
|
});
|
|
|
|
/**
|
|
* Event Handlers
|
|
*/
|
|
|
|
chrome.storage.onChanged.addListener(interceptor._handleStorageChanged);
|