Skip to content

Instantly share code, notes, and snippets.

/x.js

Created July 14, 2009 02:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/146668 to your computer and use it in GitHub Desktop.
Save anonymous/146668 to your computer and use it in GitHub Desktop.
/*
This file has been modified from Onur Yalazi's original distribution
by Brandon Goldsworthy and Alejandro Carrazzoni. This version only works with
Ubiquity 0.5 or newer. For Ubiquity 0.1.x go to
http://www.yalazi.org/ubiquity/commands/bugmenot.js
Changes:
Added a preview. The preview shows all of bugmenot's results,
though execute will still only insert the highest rated one.
Use current window location as default url for both preview and execute
Add error callback to jQuery call to bugmenot's page.
If not in editable field, opens bugmenot in new tab
Adapted to work in Parser 2.
Onur's original attribution info is left in-tact below.
You can get his original file there.
*/
CmdUtils.CreateCommand({
names: ["bugmenot", "find logins"],
homepage: "http://www.yalazi.org/ubiquity",
author: { name: "Onur YALAZI", email: "yalazi@gen3.com.tr"},
license: "MPL",
description: "modified by Brandon Goldsworthy and Alejandro Carrazzoni. Get password for current page or entry from bugmenot.com",
help: "If you're in an editable text area, inserts username and password",
_decodeIt: function(data,key) {
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o11 = "";var o21 = ""; var o31 = "";
var h11 = "";var h21 = ""; var h31 = "";var h41 = "";
var bits1 = ""; var i1 = 0; var enc1 = "";
do {
h11 = b64.indexOf(data.charAt(i1++));
h21 = b64.indexOf(data.charAt(i1++));
h31 = b64.indexOf(data.charAt(i1++));
h41 = b64.indexOf(data.charAt(i1++));
bits1 = h11 << 18 | h21 << 12 | h31 << 6 | h41;
o11 = bits1 >> 16 & 255;
o21 = bits1 >> 8 & 255;
o31 = bits1 & 255;
if (h31 == 64) {
enc1 += String.fromCharCode(o11);
} else if (h41 == 64) {
enc1 += String.fromCharCode(o11, o21);
} else {
enc1 += String.fromCharCode(o11, o21, o31);
}
} while (i1 < data.length);
strInput = enc1;
strOutput = "";
intOffset = (key + 112) / 12;
for (i1 = 4; i1 < strInput.length; i1++) {
thisLetter = strInput.charAt(i1);
thisCharCode = strInput.charCodeAt(i1);
newCharCode = thisCharCode - intOffset;
strOutput += String.fromCharCode(newCharCode);
}
return strOutput;
},
_inField: function(){
//gleaned from CmdUtils.setSelection
return context.focusedWindow.document.designMode == "on" ||
(context.focusedElement && context.focusedElement.selectionStart >= 0);
},
_getPassword: function(args, parent, pblock) {
var baseUrl = "http://www.bugmenot.com/view/" + args.modifier.text;
if (!pblock && !this._inField()){
Utils.openUrlInBrowser(baseUrl);
}else{
jQuery.ajax({
url:baseUrl,
error:function(){
if (pblock){
pblock.innerHTML += "Passwords not found.<br />";
}else{
displayMessage("Passwords not found.");
CmdUtils.setSelection("Passwords not found.");
}
},
success:function( passwords ) {
key = parseInt(passwords.match(/key.=.([0-9]*)/)[1]);
var result = "";
arrayToWork = passwords.split("<div class=\"account\"");
if (arrayToWork.length && arrayToWork.length > 1) {
o_password = "";
o_username = "";
o_rate = 0;
for (i=0;i<arrayToWork.length; i++) {
if (pair = arrayToWork[i].match(/d\('(.*)'\)/g)) {
rate = parseInt(arrayToWork[i].match(/[0-9]{1,3}%/));
username = pair[0].match(/'(.*)'/)[1];
username = parent._decodeIt( username, key );
password = pair[1].match(/'(.*)'/)[1];
password = parent._decodeIt( password, key);
if (pblock){
pblock.innerHTML += rate + "% " + username + ":" + password + "<br />";
}
if (rate > o_rate) {
o_password = password;
o_username = username;
o_rate = rate;
}
}
}
if (o_rate > 0) {
result = o_username + ':' + o_password;
} else {
result = 'Passwords not found.';
if (pblock){
pblock.innerHTML += "Passwords not found.<br />";
}
}
} else {
result = 'Passwords not found.';
if (pblock){
pblock.innerHTML += "Passwords not found.<br />";
}
}
if (!pblock){
displayMessage(result);
CmdUtils.setSelection(result);
}
}
});
}
},
arguments: [{role: "modifier", nountype: noun_arb_text, label: "url"}],
preview: function( pblock, args ) {
pblock.innerHTML = "";
if (args.modifier.text.length < 1){
args.modifier.text = String(Application.activeWindow.activeTab.document.location);
}
pblock.innerHTML = "Passwords for: " + args.modifier.text + "<br />";
this._getPassword(args, this, pblock);
},
execute: function( args ) {
if (args.modifier.text.length < 1){
args.modifier.text = String(Application.activeWindow.activeTab.document.location);
}
this._getPassword(args, this, false);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment