mirror of
https://github.com/MailHops/mailhops-plugin.git
synced 2025-05-16 22:30:09 -07:00
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.
173 lines
7.6 KiB
JavaScript
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);
|
|
}
|
|
}
|