msn-redirect/background.js

70 lines
2.4 KiB
JavaScript

const patterns = ["https://www.msn.com/*/news/*", "https://www.msn.com/*/tv/*","https://www.msn.com/*/movies/*" , "https://www.msn.com/*/sports/*", "https://www.msn.com/*/health/*", "https://www.msn.com/*/channel/*", "https://www.msn.com/*/travel/*", "https://www.msn.com/*/health/*", "https://www.msn.com/*/lifestyle/*"];
var found = 0;
var redirectUrl = "";
//Finds original article URL from DuckDuckGo dork.
async function findOrigUrl(title, site) {
var siteUrl = await ddGet("https://duckduckgo.com/html/?q=" + site);
console.log("Site Url: " + siteUrl);
var articleUrl = await ddGet("https://duckduckgo.com/html/?q=title:" + title + " site:" + siteUrl);
return articleUrl;
}
async function ddGet(url){
var results = await fetch(url)
.then(res => res.text());
var resultParse = results.split("<!-- This is the visible part -->");
var findUrl = resultParse[1].split('href="//duckduckgo.com/l/?uddg=');
var extractUrl = findUrl[1].split('>');
var trimUrl = extractUrl[0].split("&amp");
var url = decodeURIComponent(trimUrl[0]);
return url;
}
//Redirects the URL
async function redirect(requestDetails){
if(requestDetails.method === "POST" && requestDetails.requestBody && found != 1){
var rawData = requestDetails.requestBody.raw[0].bytes;
const decoder = new TextDecoder("utf-8");
var dataString = decoder.decode(rawData);
var data = JSON.parse(dataString);
var targetURL = "";
if(data.data.page.content.brand){
var brand = data.data.page.content.brand;
var title = data.data.page.content.title;
console.log(brand);
targetUrl = await findOrigUrl(title, brand);
console.log(targetUrl);
redirectUrl = targetUrl;
found = 1;
}
}
}
//Listener for any URL in the patterns list.
browser.webRequest.onBeforeRequest.addListener(
redirect,
{ urls: [ "https://browser.events.data.msn.com/*" ], },
["blocking", "requestBody"]
);
browser.webRequest.onBeforeRequest.addListener(
function (requestDetails){
found = 0;
},
{ urls: patterns },
["blocking"]
);
browser.browserAction.onClicked.addListener(
function (){
if(redirectUrl != ""){
let creating = browser.tabs.create({
url: redirectUrl,
});
redirectUrl = "";
creating.then(onCreated, onError);
}
});