igorette (owner)

Revisions

gist: 19867 Download_button fork
public
Public Clone URL: git://gist.github.com/19867.git
Embed All Files: show embed
x #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
 This file has been modified from Onur Yalazi's original distribution
 by Brandon Goldsworthy.
 
 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
 
 Onur's original attribution info is left in-tact below.
 You can get his original file there.
*/
 
CmdUtils.CreateCommand({
  name: "bugmenot",
 
  homepage: "http://www.yalazi.org/ubiquity",
  author: { name: "Onur YALAZI", email: "yalazi@gen3.com.tr"},
  license: "MPL",
  description: "modified by Brandon Goldsworthy. Get password for current page or entry from bugmenot.com",
  help: "If you're in an editable text area, inserts <username:password> double",
 
  _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(urlAddress, parent, pblock) {
 
    var baseUrl = "http://www.bugmenot.com/view/" + urlAddress.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);
          }
        }
      });
    }
  },
 
  takes: {"url": noun_arb_text},
  preview: function( pblock, urlAddress) {
    pblock.innerHTML = "";
    if (urlAddress.text.length < 1){
       urlAddress.text = String(Application.activeWindow.activeTab.document.location);
    }
    pblock.innerHTML = "Passwords for: " + urlAddress.text + "<br />";
    this._getPassword(urlAddress, this, pblock);
  },
  execute: function( urlAddress ) {
    if (urlAddress.text.length < 1){
      urlAddress.text = String(Application.activeWindow.activeTab.document.location);
    }
    this._getPassword(urlAddress, this, false);
  }
})