home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Minami 80
/
MINAMI80.iso
/
Extra
/
DivXInstaller.exe
/
$PLUGINSDIR
/
GoogleToolbarFirefox.msi
/
xpi
/
amulet-jslib
/
trtable.js
< prev
next >
Wrap
Text File
|
2006-05-15
|
4KB
|
121 lines
function PROT_TRTable(name) {
this.debugZone = "trtable";
this.enchashDecrypter_ = new PROT_EnchashDecrypter();
var components = name.split("-");
if (components.length != 3)
throw new Error("TRTables have names like name-function-type");
var handlerTable = {
"domain" : this.lookupDomain_,
"enchash" : this.lookupEnchash_,
"url" : this.lookupURL_,
"text" : this.lookupText_
};
this.find = handlerTable[components[2]];
if (!this.find)
throw new Error("Unknown table type: " + components[2]);
this.name_ = name;
this.dbTable_ = Cc["@google.com/tableservice;1"]
.getService(Ci.GTBITableService);
}
PROT_TRTable.prototype.find_ = function(key) {
return this.dbTable_.exists(this.name_, key);
}
PROT_TRTable.prototype.insert = function(key, value) {
return this.dbTable_.insert(this.name_, key, value);
}
PROT_TRTable.prototype.erase = function(key) {
return this.dbTable_.remove(this.name_, key);
}
PROT_TRTable.prototype.lookupText_ = function(key) {
G_Debug(this, "looking up " + key + " in " + this.name_);
return this.find_(key);
}
PROT_TRTable.prototype.lookupURL_ = function(url) {
var canonicalized = PROT_URLCanonicalizer.canonicalizeURL_(url);
return this.find_(canonicalized);
}
PROT_TRTable.prototype.lookupDomain_ = function(url) {
var canonicalized = PROT_URLCanonicalizer.canonicalizeURL_(url);
var urlObj = Cc["@mozilla.org/network/standard-url;1"]
.createInstance(Ci.nsIURL);
urlObj.spec = canonicalized;
var host = urlObj.host;
var hostComponents = host.split(".");
var path = urlObj.filePath;
var pathComponents = path.split("/");
for (var i = 0; i < hostComponents.length - 1; i++) {
host = hostComponents.slice(i).join(".");
var val = this.find_(host);
if (val)
return val;
if (pathComponents.length >= 2 && pathComponents[1].length > 0) {
host = host + "/" + pathComponents[1];
var val = this.find_(host);
if (val)
return val;
}
}
return undefined;
}
PROT_TRTable.prototype.lookupEnchash_ = function(url) {
var host = this.enchashDecrypter_.getCanonicalHost(url);
for (var i = 0; i < PROT_EnchashDecrypter.MAX_DOTS + 1; i++) {
var key = this.enchashDecrypter_.getLookupKey(host);
var encrypted = this.find_(key);
if (encrypted && encrypted.length) {
G_Debug(this, "Enchash DB has host " + host + " (key: " + key + ")");
var decrypted = this.enchashDecrypter_.decryptData(encrypted, host);
var res = this.enchashDecrypter_.parseRegExps(decrypted);
for (var j = 0; j < res.length; j++) {
if (res[j].test(url))
return true;
}
}
var index = host.indexOf(".");
if (index == -1)
break;
host = host.substring(index + 1);
}
return undefined;
}
function TEST_PROT_TRTable() {
if (G_GDEBUG) {
var z = "trtable UNITTEST";
G_debugService.enableZone(z);
G_Debug(z, "Starting");
var url = "http://www.yahoo.com?foo=bar";
var url2 = "http://168.188.99.26/.secure/www.ebay.com/";
var urlTable = new PROT_TRTable("test-foo-url");
urlTable.insert(url, "1");
urlTable.insert(url2, "1");
G_Assert(z, urlTable.find(url) == "1", "URL lookups broken");
G_Assert(z, urlTable.find(url2) == "1", "URL lookups broken");
G_Assert(z, urlTable.find("http://%31%36%38%2e%31%38%38%2e%39%39%2e%32%36/%2E%73%65%63%75%72%65/%77%77%77%2E%65%62%61%79%2E%63%6F%6D/")
== "1", "Canonicalized URL lookup broken");
G_Assert(z, !urlTable.find("about:config"), "about:config breaks domlook");
var dom1 = "bar.com";
var dom2 = "amazon.co.uk";
var dom3 = "127.0.0.1";
var domainTable = new PROT_TRTable("test-foo-domain");
domainTable.insert(dom1, "1");
domainTable.insert(dom2, "1");
domainTable.insert(dom3, "1");
G_Assert(z, domainTable.find("http://www.bar.com/?zaz=asdf#url") == "1",
"Domain lookups broken (single dot)");
G_Assert(z, domainTable.find("http://www.amazon.co.uk/?z=af#url") == "1",
"Domain lookups broken (two dots)");
G_Assert(z, domainTable.find("http://127.0.0.1/?z=af#url") == "1",
"Domain lookups broken (IP)");
G_Assert(z, domainTable.find("http://%31%32%37%2e%30%2e%30%2e%31/?z=af#url") == "1",
"Canonicalized domain lookups broken (IP)");
domainTable.insert("foo.com/path", "1");
G_Assert(z, !domainTable.find("http://www.foo.com/?zaz=asdf#url"),
"Domain lookups broken (path mismatch)");
G_Assert(z, domainTable.find("http://www.foo.com/path?zaz=asdf#url") == "1",
"Domain lookups broken (path match)");
G_Assert(z, domainTable.find("http://www.foo.com/path/more?zaz=asdf#url") == "1",
"Domain lookups broken (long path match)");
G_Debug(z, "PASSED");
}
}