// https://stackoverflow.com/questions/14226803/wait-5-seconds-before-executing-next-line
const delay = (ms) => new Promise((res) => setTimeout(res, ms));
/**
* Get the number of connections made by the website.
* @constructor
*/
const getConnections = async () => {
await delay(100);
var countReqs = window.performance.getEntriesByType("resource").length;
return countReqs;
};
/**
* Get the lenght of cookies array.
* @constructor
*/
function grabCookies() {
let cookies = document.cookie;
const cArr = decodeURIComponent(cookies).split(";");
return cArr.length;
}
/**
* Get the total number of cookies.
* @constructor
*/
function grabCookiesSize() {
let cookies = document.cookie;
const cArr = decodeURIComponent(cookies).split(";");
var _lsTotal = 0,
_xLen,
_x;
for (_x in cArr) {
_lsTotal += _x.length * 2;
}
return _lsTotal.toFixed(2);
}
/**
* Get the canvas fingerprinting array.
* @constructor
*/
function isCanvasFingerprinting() {
let arr = document.querySelectorAll("canvas");
return arr.length;
}
/**
* Get the local storage size.
* @constructor
*/
function showLocalStorage() {
var _lsTotal = 0,
_xLen,
_x;
for (_x in localStorage) {
if (!localStorage.hasOwnProperty(_x)) {
continue;
}
_xLen = (localStorage[_x].length + _x.length) * 2;
_lsTotal += _xLen;
}
return (_lsTotal / 1024).toFixed(2);
}
/**
* Get all the external connections made.
* @constructor
*/
function getExternalConnections() {
var originalUrl = window.location.origin;
var cleanUrl = originalUrl.replace(/^https?:\/\//, "").replace("www.", "");
var resourceList = window.performance.getEntries();
var nExternalConnections = 0;
var nExternalJs = 0;
for (i = 0; i < resourceList.length; i++) {
if (!resourceList[i].name.includes(cleanUrl)) {
nExternalConnections++;
if (resourceList[i].name.slice(-2) == "js") {
nExternalJs++;
}
}
}
return { nExternalConnections, nExternalJs };
}
/**
* Create the page score and render the HTML.
* @constructor
*/
const scorePage = async () => {
await delay(3000);
var cook = grabCookies();
var canv = isCanvasFingerprinting();
var locs = showLocalStorage();
var conns = getExternalConnections();
var conn = conns.nExternalConnections;
var extJs = conns.nExternalJs;
var csiz = grabCookiesSize();
// var score = calc_score(cook, canv, locs, conn);
// var color = 'white';
var cookColor, csizColor, canvColor, locsColor, connColor, extJsColor;
const GREEN = "#55ff55";
const YELLOW = "#ffff14";
const RED = "#e50000";
if (cook > 30) cookColor = RED;
else if (cook > 15) cookColor = YELLOW;
else cookColor = GREEN;
if (csiz > 100) csizColor = RED;
else if (csiz > 30) csizColor = YELLOW;
else csizColor = GREEN;
if (canv) canvColor = RED;
else canvColor = GREEN;
if (locs * 1000 > 100) locsColor = RED;
else if (locs * 1000 > 20) locsColor = YELLOW;
else locsColor = GREEN;
if (conn > 10) connColor = RED;
else if (conn > 5) connColor = YELLOW;
else connColor = GREEN;
if (extJs > 5) extJsColor = RED;
else if (conn > 3) extJsColor = YELLOW;
else extJsColor = GREEN;
const rootCookieGrabber = document.createElement("div");
rootCookieGrabber.innerHTML =
'<div style="display:flex;margin:1rem;justify-content:center;z-index:100000000; position: relative;background-color:black;border-radius:1rem;padding:0.5rem;">' +
'<h3 style="margin: 1rem;background-color:' +
cookColor +
';border-radius:1rem;padding:0.5rem;">Cookies: ' +
cook +
'<h3 style="margin: 1rem;background-color:' +
csizColor +
';border-radius:1rem;padding:0.5rem;">Cookies (Bytes): ' +
csiz +
'</h3><h3 style="margin: 1rem;background-color:' +
canvColor +
';border-radius:1rem;padding:0.5rem;">Canvas Fingerprinting: ' +
Boolean(canv) +
'</h3><h3 style="margin: 1rem;background-color:' +
locsColor +
';border-radius:1rem;padding:0.5rem;">Local Storage (KB): ' +
locs +
'</h3><h3 style="margin: 1rem;background-color:' +
connColor +
';border-radius:1rem;padding:0.5rem;">External Connections: ' +
conn +
'</h3><h3 style="margin: 1rem;background-color:' +
extJsColor +
';border-radius:1rem;padding:0.5rem;">External Scripts: ' +
extJs +
"</div>";
document.getElementsByTagName("BODY")[0].prepend(rootCookieGrabber);
// alert("DEU: cookies=" + cook.toString() + ", possibleCanvas=" + canv.toString() + ", localStorage(KB)=" + locs.toString() + ", externalConnections=" + conn.toString());
};
scorePage();