1
0
mirror of https://github.com/MailHops/mailhops-plugin.git synced 2025-05-16 22:30:09 -07:00
mailhops-plugin/js/mailhops_details.js
Mihai Moldovan 9638412388 js/mailhops_details.js: prepare to show local data even on error.
Currently, on error (rate limit, unable to reach Mailhops API), an error
message is shown and all additional information is bypassed.

This also means that the theme is not being applied.

Change the code to show local data even in error cases, and also apply
the theme option.
2024-04-17 10:34:01 +02:00

173 lines
7.6 KiB
JavaScript

const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
const tabId = parseInt(urlParams.get("tabId"), 10);
var port = browser.runtime.connect({ name: "MailHops" });
port.postMessage({ command: "details", tabId });
port.onMessage.addListener(function (msg) {
updateContent(msg);
document.getElementById("mh-map-button").addEventListener("click", function () {
// rebuild map url if it's not there
if (!msg.message.map_url && msg.response && msg.response.route && msg.response.route.length) {
let header_route = msg.response.route.map(r => r.ip).join(',');
let lookupURL = '?'+MailHopsUtils.getAPIUrlParams(msg.options)+'&r='+String(header_route)+'&l='+msg.options.lang+'&u='+msg.options.unit;
if(msg.options.owm_key != '')
lookupURL += '&owm_key='+msg.options.owm_key;
if(msg.message.time != null)
lookupURL += '&t=' + msg.message.time;
if(msg.message.date != null)
lookupURL += '&d='+msg.message.date;
msg.message.map_url = MailHopsUtils.getAPIUrl() + '/map/' + lookupURL;
}
if(msg.message.map_url)
browser.tabs.create({ url: msg.message.map_url });
});
});
document.getElementById("mh-options-button").addEventListener("click", function () {
browser.tabs.create({ url: '/content/preferences.html' });
});
function updateContent(msg, noauth) {
//setup reload
document.getElementById("mh-reload-button").addEventListener("click", async function () {
let data = await browser.storage.local.get('messages');
if (data.messages && data.messages.list[msg.message.hash]) {
delete data.messages.list[msg.message.hash];
await browser.storage.local.set({messages: data.messages});
}
this.innerHTML = "Removed!";
document.location.reload();
});
if (msg.message.error) {
document.getElementById('hop-message').classList.add('warning');
document.getElementById('mh-map-button').style.display = 'none';
document.getElementById('hop-message-header').innerHTML = msg.message.error;
}
else {
document.getElementById('hop-message').classList.remove('warning');
document.getElementById('mh-map-button').style.display = 'inline-block';
}
const route = msg.response.route || [];
const sender = msg.message.sender || null;
const unit = msg.options.unit || "mi";
const theme = msg.options.theme || "light";
let client = null;
let items = [];
// update theme
if (theme == "dark") {
if (!document.getElementById("hop-message").classList.contains("inverted")) {
document.getElementById('mh-body').classList.add('inverted');
document.getElementById('hop-message').classList.add('brown');
document.getElementById('hop-list').classList.add('inverted');
document.getElementById('mh-pop-segment').classList.add('inverted');
document.getElementById('mh-map-button').classList.add('inverted');
document.getElementById('mh-reload-button').classList.add('inverted');
document.getElementById('mh-options-button').classList.add('inverted');
}
} else {
if (document.getElementById("hop-message").classList.contains("inverted")) {
document.getElementById('mh-body').classList.remove('inverted');
document.getElementById('hop-message').classList.remove('brown');
document.getElementById('hop-list').classList.remove('inverted');
document.getElementById('mh-pop-segment').classList.remove('inverted');
document.getElementById('mh-map-button').classList.remove('inverted');
document.getElementById('mh-reload-button').classList.remove('inverted');
document.getElementById('mh-options-button').classList.remove('inverted');
}
}
for (var i = 0; i < route.length; i++) {
var header = 'Private';
var icon = '/images/local.png';
// set the client route
if (route[i].client)
client = route[i];
if(route[i].countryCode)
icon = '/images/flags/' + route[i].countryCode.toLowerCase() + '.png';
if(route[i].city && route[i].state)
header = route[i].city + ', ' + route[i].state;
else if(route[i].city && route[i].countryCode)
header = route[i].city + ', ' + route[i].countryCode;
else if (route[i].city)
header = route[i].city;
else if (route[i].state)
header = route[i].state;
else if (route[i].countryName)
header = route[i].countryName;
var description = '<a href="https://www.mailhops.com/whois/' + route[i].ip + '" target="_blank" title="Who Is?">' + route[i].ip + '</a><br/>';
if (msg.message.secure.indexOf(route[i].ip) !== -1) {
description += '<img src="/images/auth/lock.png" title="Used TLS or SSL" /> ';
}
if (route[i].host)
description += route[i].host;
if (route[i].whois && route[i].whois.descr)
description += MailHopsUtils.htmlEncode(route[i].whois.descr);
if (route[i].whois && route[i].whois.netname)
description += MailHopsUtils.htmlEncode(route[i].whois.netname);
var weather = '';
if (route[i].weather) {
weather = ' <img src="' + route[i].weather.icon_url + '" width="25" /> ';
weather += Math.round(route[i].weather.temp).toString() + '°' + route[i].weather.temp_unit+' ';
weather += route[i].weather.summary;
}
var asn = '';
if (route[i].asn) {
asn = '<br/>ASN Org: ' + MailHopsUtils.htmlEncode(route[i].asn.autonomous_system_organization);
asn += ' (<a href="https://dnschecker.org/asn-whois-lookup.php?query='+route[i].asn.autonomous_system_number+'" target="_blank" title="ASN Lookup">' + route[i].asn.autonomous_system_number + '</a>)'
}
var auth = '';
if (!noauth && msg.message.auth.length) {
for (var a = 0; a < msg.message.auth.length; a++){
if (msg.message.auth[a].icon) {
auth += '<label class="tiny ui label ' + msg.message.auth[a].color + '"><img src="' + msg.message.auth[a].icon + '"/>' + msg.message.auth[a].type + ' ' + msg.message.auth[a].copy + '</label>';
}
else if (msg.message.auth[a].link) {
if (-1 !== msg.message.auth[a].link.indexOf(',')) {
auth += '<a class="tiny ui label ' + msg.message.auth[a].color + '" href="'+msg.message.auth[a].link.substr(0,msg.message.auth[a].link.indexOf(','))+'" target="_blank">' + msg.message.auth[a].type + '</a>';
}
else {
auth += '<a class="tiny ui label ' + msg.message.auth[a].color + '" href="'+msg.message.auth[a].link+'" target="_blank">' + msg.message.auth[a].type + '</a>';
}
}
}
}
// append child
items.push('<div class="item"><div class="content"><div class="header"><img src="'+ icon + '" /> ' + header + weather +' <label class="ui circular label icon" style="float: right;">'+ (i + 1) +'</label></div><div class="description">'+ description + asn + '</div></div></div>');
}
// header
if (!msg.message.error) {
document.getElementById('hop-message-header').innerHTML = `${route.length} Hops`;
if (sender && client) {
document.getElementById('hop-message-header').innerHTML += ' over '+MailHopsUtils.getDistance(sender, client, unit) + ' ' + unit;
}
}
// hop list
document.getElementById('hop-list').innerHTML = items.join('');
try {
document.getElementById('mh-auth').innerHTML = auth;
} catch (error) {
if(error)
console.error('MailHops', error);
// if auth has bad html load without auth
if(!noauth)
updateContent(msg, true);
}
}