1
0
mirror of https://github.com/MailHops/mailhops-plugin.git synced 2025-05-17 23:00:10 -07:00

Added lookup cache

This commit is contained in:
Andrew Van Tassel 2012-10-17 21:21:34 -06:00
parent d3358943fa
commit 2f534a44ce
7 changed files with 144 additions and 20 deletions

View File

@ -6,6 +6,7 @@
var mailHops = var mailHops =
{ {
msgURI: null,
resultTextDataPane: null, resultTextDataPane: null,
resultTextDataPane2: null, resultTextDataPane2: null,
resultContainerDataPane: null, resultContainerDataPane: null,
@ -25,8 +26,9 @@ var mailHops =
isLoaded: false, isLoaded: false,
options: {'map':'goog','unit':'mi','api_url':'http://api.mailhops.com'}, options: {'map':'goog','unit':'mi','api_url':'http://api.mailhops.com'},
appVersion: 'MailHops Postbox 0.7.1', appVersion: 'MailHops Postbox 0.8',
message: {secure:[]}, message: {secure:[]},
client_location: null
} }
mailHops.init = function() mailHops.init = function()
@ -114,11 +116,17 @@ mailHops.loadPref = function()
mailHops.options.use_private = mailHops.getCharPref('mail.mailHops.use_private','false')=='true'?true:false; mailHops.options.use_private = mailHops.getCharPref('mail.mailHops.use_private','false')=='true'?true:false;
mailHops.options.hosting = mailHops.getCharPref('mail.mailHops.hosting','personal'); mailHops.options.hosting = mailHops.getCharPref('mail.mailHops.hosting','personal');
mailHops.options.client_location = mailHops.getCharPref('mail.mailHops.client_location','');
if(mailHops.options.use_private) if(mailHops.options.use_private)
mailHops.options.api_url = mailHops.getCharPref('mail.mailHops.api_url','http://api.mailhops.com'); mailHops.options.api_url = mailHops.getCharPref('mail.mailHops.api_url','http://api.mailhops.com');
else else
mailHops.options.api_url='http://api.mailhops.com'; mailHops.options.api_url='http://api.mailhops.com';
if(mailHops.options.client_location == ''){
mailHops.setClientLocation();
}
}; };
mailHops.StreamListener = mailHops.StreamListener =
@ -177,7 +185,7 @@ mailHops.loadHeaderData = function()
{ {
return ; return ;
} }
mailHops.msgURI = msgURI;
var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance ( Components.interfaces.nsIMessenger ) ; var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance ( Components.interfaces.nsIMessenger ) ;
var msgService = messenger.messageServiceFromURI ( msgURI ) ; var msgService = messenger.messageServiceFromURI ( msgURI ) ;
msgService.CopyMessage ( msgURI , mailHops.StreamListener , false , null , msgWindow , {} ) ; msgService.CopyMessage ( msgURI , mailHops.StreamListener , false , null , msgWindow , {} ) ;
@ -250,7 +258,7 @@ var regexAllIp = /(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)\.(1\d{
all_ips.unshift( ip[0] ); all_ips.unshift( ip[0] );
} }
if ( all_ips.length != 0 ){ if ( all_ips.length != 0 ){
mailHops.lookup ( all_ips ) ; mailHops.lookupRoute ( all_ips ) ;
} else { } else {
mailHops.displayResult(); mailHops.displayResult();
} }
@ -279,9 +287,9 @@ mailHops.testIP = function(ip,header){
//check if this IP was part of a secure transmission //check if this IP was part of a secure transmission
if(retval){ if(retval){
if(header.indexOf('using SSL') != -1) if(header.indexOf('using SSL') != -1)
mailHops.message.secure.push(ip+':'+header.substring(header.indexOf('using SSL'),11)); mailHops.message.secure.push(ip+':'+header.substring(header.indexOf('using SSL'),header.indexOf('using TLS')+11));
else if(header.indexOf('using TLS') != -1) else if(header.indexOf('using TLS') != -1)
mailHops.message.secure.push(ip+':'+header.substring(header.indexOf('using TLS'),11)); mailHops.message.secure.push(ip+':'+header.substring(header.indexOf('using TLS'),header.indexOf('using TLS')+11));
else if(header.indexOf('version=TLSv1/SSLv3') != -1) else if(header.indexOf('version=TLSv1/SSLv3') != -1)
mailHops.message.secure.push(ip+':'+'using TLSv1/SSLv3'); mailHops.message.secure.push(ip+':'+'using TLSv1/SSLv3');
} }
@ -576,8 +584,13 @@ mailHops.displayResult = function ( header_route, response, meta, lookup_url ){
document.getElementById('dataPaneMailHopsMetaContainer').style.display='none'; document.getElementById('dataPaneMailHopsMetaContainer').style.display='none';
} }
if(response){ if(response && response.route && response.route.length > 0){
if(mailHops.options.client_location){
var client_location = JSON.parse(mailHops.options.client_location);
response.route.push(client_location.route[0]);
}
for(var i=0; i<response.route.length;i++){ for(var i=0; i<response.route.length;i++){
//get the first hop location //get the first hop location
if(!gotFirst && !response.route[i].private && !response.route[i].client){ if(!gotFirst && !response.route[i].private && !response.route[i].client){
@ -634,7 +647,7 @@ mailHops.displayResult = function ( header_route, response, meta, lookup_url ){
if(secureToolTipText){ if(secureToolTipText){
var secure = document.createElement('label'); var secure = document.createElement('label');
secure.setAttribute('class','dataPaneAddressitem mailhopsSecure'); secure.setAttribute('class','dataPaneAddressitem mailhopsSecure');
secure.setAttribute('value','secured using '+secureToolTipText); secure.setAttribute('value','secured '+secureToolTipText);
mailHops.resultDetails.appendChild(secure); mailHops.resultDetails.appendChild(secure);
} }
} }
@ -856,8 +869,35 @@ mailHops.getCharPref = function ( strName , strDefault ){
return ( value ) ; return ( value ) ;
}; };
mailHops.setClientLocation = function(){
var xmlhttp = new XMLHttpRequest();
if (!pref){
var pref = Components.classes["@mozilla.org/preferences-service;1"].getService ( Components.interfaces.nsIPrefBranch ) ;
}
xmlhttp.open("GET", mailHops.options.api_url+'/v1/lookup/?tb&app='+mailHops.appVersion+'&r=&c=1',true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
try{
var data = JSON.parse(xmlhttp.responseText);
if(data && data.meta.code==200){
//display the result
pref.setCharPref("mail.mailHops.client_location", JSON.stringify(data.response)) ;
} else {
pref.setCharPref("mail.mailHops.client_location", '') ;
}
}
catch (e){
pref.setCharPref("mail.mailHops.client_location", '') ;
}
}
};
xmlhttp.send(null);
};
//mailhops lookup //mailhops lookup
mailHops.lookup = function(header_route){ mailHops.lookupRoute = function(header_route){
//setup loading //setup loading
mailHops.clearRoute(); mailHops.clearRoute();
@ -865,22 +905,34 @@ mailHops.lookup = function(header_route){
//import nativeJSON //import nativeJSON
var nativeJSON = Components.classes["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON); var nativeJSON = Components.classes["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON);
//check for cache
var cached_results=mailHops.getResults();
if(cached_results){
cached_results = JSON.parse(cached_results);
mailHops.displayResult(header_route,cached_results.response);
return;
}
//call mailhops api for lookup //call mailhops api for lookup
var xmlhttp = new XMLHttpRequest(); var xmlhttp = new XMLHttpRequest();
var lookupURL=mailHops.options.api_url+'/v1/lookup/?pb&app='+mailHops.appVersion+'&r='+String(header_route); var lookupURL=mailHops.options.api_url+'/v1/lookup/?pb&app='+mailHops.appVersion+'&r='+String(header_route);
if(mailHops.options.show_weather) if(mailHops.options.show_weather)
lookupURL+='&w=1'; lookupURL+='&w=1';
if(mailHops.options.client_location != '')
lookupURL+='&c=0';
xmlhttp.open("GET", lookupURL ,true); xmlhttp.open("GET", lookupURL ,true);
xmlhttp.onreadystatechange=function() { xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) { if (xmlhttp.readyState==4) {
try{ try{
var data = JSON.parse(xmlhttp.responseText); var data = JSON.parse(xmlhttp.responseText);
if(data && data.meta.code==200){ if(data && data.meta.code==200){
//save the result
mailHops.saveResults(JSON.stringify(data));
//display the result //display the result
mailHops.displayResult(header_route,data.response,data.meta, lookupURL); mailHops.displayResult(header_route,data.response,data.meta, lookupURL);
} else { } else {
//display the error //display the error
mailHops.displayError(data); mailHops.displayError(data);
@ -906,13 +958,11 @@ mailHops.addCommas = function(nStr){
return x1 + x2; return x1 + x2;
}; };
mailHops.launchWhoIs = function(ip){ mailHops.launchWhoIs = function(ip){
var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance(); var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance().QueryInterface(Components.interfaces.nsIMessenger);
messenger = messenger.QueryInterface(Components.interfaces.nsIMessenger);
messenger.launchExternalURL('http://www.mailhops.com/whois/'+ip); messenger.launchExternalURL('http://www.mailhops.com/whois/'+ip);
}; };
mailHops.launchSpamHausURL = function(ip){ mailHops.launchSpamHausURL = function(ip){
var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance(); var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance().QueryInterface(Components.interfaces.nsIMessenger);
messenger = messenger.QueryInterface(Components.interfaces.nsIMessenger);
messenger.launchExternalURL('http://www.spamhaus.org/query/bl?ip='+ip); messenger.launchExternalURL('http://www.spamhaus.org/query/bl?ip='+ip);
}; };
@ -927,4 +977,33 @@ mailHops.launchMap = function(route){
} }
}; };
mailHops.saveResults = function(results){
if(!mailHops.msgURI)
return false;
var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance().QueryInterface(Components.interfaces.nsIMessenger);
var msgHdr = messenger.messageServiceFromURI(mailHops.msgURI).messageURIToMsgHdr(mailHops.msgURI);
if(!msgHdr)
return false;
msgHdr.setStringProperty( "MH-Route", results );
};
mailHops.getResults = function(){
if(!mailHops.msgURI)
return false;
var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance().QueryInterface(Components.interfaces.nsIMessenger);
var msgHdr = messenger.messageServiceFromURI(mailHops.msgURI).messageURIToMsgHdr(mailHops.msgURI);
if(!msgHdr)
return false;
return msgHdr.getStringProperty( "MH-Route" );
};
addEventListener ( "messagepane-loaded" , mailHops.setupEventListener , true ) ; addEventListener ( "messagepane-loaded" , mailHops.setupEventListener , true ) ;

View File

@ -103,6 +103,8 @@ var mailHopPreferences =
document.getElementById("mailhop.use_private").checked = false; document.getElementById("mailhop.use_private").checked = false;
this.api_url.value = pref.getCharPref("mail.mailHops.api_url",'http://api.mailhops.com'); this.api_url.value = pref.getCharPref("mail.mailHops.api_url",'http://api.mailhops.com');
ResetLocation(document.getElementById("mailhop.refresh_location"));
} , } ,
savePreferences: function() savePreferences: function()
@ -137,7 +139,9 @@ function ChangePrivate(item){
} }
} }
function TestConnection(){ function TestConnection(e){
e.style.backgroundImage = 'url(chrome://mailhops/content/images/loader.gif)';
var xmlhttp = new XMLHttpRequest(); var xmlhttp = new XMLHttpRequest();
var nativeJSON = Components.classes["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON); var nativeJSON = Components.classes["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON);
var lookupURL=mailHopPreferences.api_url.value+'/v1/lookup/?pb&app='+mailHops.appVersion+'&watchmouse'; var lookupURL=mailHopPreferences.api_url.value+'/v1/lookup/?pb&app='+mailHops.appVersion+'&watchmouse';
@ -147,13 +151,16 @@ function TestConnection(){
try{ try{
var data = JSON.parse(xmlhttp.responseText); var data = JSON.parse(xmlhttp.responseText);
if(data && data.meta.code==200){ if(data && data.meta.code==200){
e.style.backgroundImage='';
alert('Connection Succeeded to '+mailHopPreferences.api_url.value+'!'); alert('Connection Succeeded to '+mailHopPreferences.api_url.value+'!');
} else { } else {
//display the error //display the error
e.style.backgroundImage='';
alert('Connection Failed to '+mailHopPreferences.api_url.value+'!'); alert('Connection Failed to '+mailHopPreferences.api_url.value+'!');
} }
} }
catch (ex){ catch (ex){
e.style.backgroundImage='';
alert('Connection Failed to '+mailHopPreferences.api_url.value+'!'); alert('Connection Failed to '+mailHopPreferences.api_url.value+'!');
} }
} }
@ -161,6 +168,28 @@ function TestConnection(){
xmlhttp.send(null); xmlhttp.send(null);
} }
function ResetLocation(e){
e.style.backgroundImage = 'url(chrome://mailhops/content/images/loader.gif)';
document.getElementById("mailhop.client_location").value='Getting your location...';
mailHops.setClientLocation();
if(pref.getCharPref("mail.mailHops.client_location", '') != ''){
var response = JSON.parse(pref.getCharPref("mail.mailHops.client_location", ''));
var location = '';
if(response.route[0].city)
location+=response.route[0].city;
if(response.route[0].state)
location+=', '+response.route[0].state;
if(response.route[0].countryName)
location+=' ( '+response.route[0].countryName+' )';
//set location
document.getElementById("mailhop.client_location").value=location;
//set country flag
if(response.route[0].countryCode)
document.getElementById("mailhop.client_location").style.backgroundImage='url(chrome://mailhops/content/images/flags/'+response.route[0].countryCode.toLowerCase()+'.png)';
}
e.style.backgroundImage='';
}
function ResetConnection(){ function ResetConnection(){
mailHopPreferences.api_url.value='http://api.mailhops.com'; mailHopPreferences.api_url.value='http://api.mailhops.com';
} }

View File

@ -19,6 +19,7 @@
<tab label="Defaults"/> <tab label="Defaults"/>
<tab label="Display"/> <tab label="Display"/>
<tab label="Hosting"/> <tab label="Hosting"/>
<tab label="My Location"/>
</tabs> </tabs>
<tabpanels> <tabpanels>
<tabpanel> <tabpanel>
@ -75,9 +76,22 @@
<checkbox id="mailhop.use_private" label="Yes, I Agree to MailHops terms of use for hosting my own MailHops API." checked="false" oncommand="ChangePrivate(this);"/> <checkbox id="mailhop.use_private" label="Yes, I Agree to MailHops terms of use for hosting my own MailHops API." checked="false" oncommand="ChangePrivate(this);"/>
<label class="text-link" value="MailHops Terms of Use" href="http://www.mailhops.com/terms"/> <label class="text-link" value="MailHops Terms of Use" href="http://www.mailhops.com/terms"/>
<textbox id="mailhop.api_url" value="http://api.mailhops.com" disabled="true"/> <textbox id="mailhop.api_url" value="http://api.mailhops.com" disabled="true"/>
<label class="text-link" onclick="TestConnection();" value="Test Connection" /> <label class="text-link" onclick="ResetConnection();" value="Reset Connection" /> <label class="text-link act" onclick="TestConnection(this);" value="Test Connection" />
<label class="text-link act" onclick="ResetConnection();" value="Reset Connection" />
</groupbox> </groupbox>
</tabpanel> </tabpanel>
<tabpanel>
<groupbox>
<caption label="My Location"/>
<description>
Your location is cached to reduce the number of lookups by one.
</description>
<label id="mailhop.client_location" class="act" value="Not Set" />
<label id="mailhop.refresh_location" class="text-link act" onclick="ResetLocation(this);" value="Refresh your location" />
</groupbox>
</tabpanel>
</tabpanels> </tabpanels>
</tabbox> </tabbox>
</vbox> </vbox>

View File

@ -85,4 +85,6 @@
#mailhopsDataPaneMeta label{ #mailhopsDataPaneMeta label{
padding-left: 20px; padding-left: 20px;
} }
#mhTabs .act { padding-left: 20px; background-repeat: no-repeat; outline : none;}

View File

@ -7,7 +7,7 @@
<em:id>postbox@mailhops.com</em:id> <em:id>postbox@mailhops.com</em:id>
<em:type>2</em:type> <em:type>2</em:type>
<em:name>MailHops</em:name> <em:name>MailHops</em:name>
<em:version>0.7.1</em:version> <em:version>0.8</em:version>
<em:description>MailHops maps the route an email traveled to get to you. Using GeoIP it also displays distance traveled along with the location (city, state and country) of the sender.</em:description> <em:description>MailHops maps the route an email traveled to get to you. Using GeoIP it also displays distance traveled along with the location (city, state and country) of the sender.</em:description>
<em:iconURL>chrome://mailhops/content/images/mailhops32.png</em:iconURL> <em:iconURL>chrome://mailhops/content/images/mailhops32.png</em:iconURL>
<em:homepageURL>http://mailhops.com</em:homepageURL> <em:homepageURL>http://mailhops.com</em:homepageURL>

Binary file not shown.

BIN
mailhops-0.8-pb.xpi Normal file

Binary file not shown.