139 { |
141 { |
140 $('input[name="password"]', this).focus(); |
142 $('input[name="password"]', this).focus(); |
141 }); |
143 }); |
142 $('#userResetForm').modal('show'); |
144 $('#userResetForm').modal('show'); |
143 } |
145 } |
|
146 |
|
147 function binToByteArray(str) |
|
148 { |
|
149 var arr = [], str = escape(str); |
|
150 |
|
151 for ( var i = 0; i < str.length; i++ ) |
|
152 { |
|
153 var chr = str.charAt(i); |
|
154 switch(chr) |
|
155 { |
|
156 case '%': |
|
157 if ( str.charAt(i+1) == 'u' && str.substr(i+2, 4).match(/[A-F0-9]{4}/) ) |
|
158 { |
|
159 arr.push(parseInt(str.substr(i+2, 2), 16)); |
|
160 arr.push(parseInt(str.substr(i+4, 2), 16)); |
|
161 i += 4; |
|
162 break; |
|
163 } |
|
164 else if ( str.substr(i+1, 2).match(/[A-F0-9]{2}/) ) |
|
165 { |
|
166 arr.push(parseInt(str.substr(i+1, 2), 16)); |
|
167 i += 2; |
|
168 break; |
|
169 } |
|
170 default: |
|
171 arr.push(str.charCodeAt(i)); |
|
172 } |
|
173 } |
|
174 |
|
175 return arr; |
|
176 } |
|
177 |
|
178 function setupSSHKeyUI() |
|
179 { |
|
180 if ( typeof(document.forms.addSSHKey) !== 'object' ) |
|
181 return; |
|
182 |
|
183 $('div.btn.ssh-key a.close').click(function() |
|
184 { |
|
185 $(this).parents('div.btn.ssh-key').remove(); |
|
186 }); |
|
187 |
|
188 $(document.forms.addSSHKey).submit(function() |
|
189 { |
|
190 $('#modal-addssh div.control-group').removeClass('error'); |
|
191 |
|
192 var keyValue = $('#newSSHKey').val(); |
|
193 if ( (keyValue.split(/ /)).length < 2 ) |
|
194 { |
|
195 $('#modal-addssh div.control-group').addClass('error'); |
|
196 return false; |
|
197 } |
|
198 |
|
199 var keyValue = keyValue.split(/ /); |
|
200 var keyType = keyValue[0]; |
|
201 var keyEncoded = keyValue[1]; |
|
202 |
|
203 if ( typeof(ssh_key_lengths[keyType]) != 'object' ) |
|
204 { |
|
205 $('#modal-addssh div.control-group').addClass('error'); |
|
206 return false; |
|
207 } |
|
208 |
|
209 var keyLength = keyEncoded.length * 0.75 - keyEncoded.replace(/[^=]/g, '').length; |
|
210 var keyBits = typeof(ssh_key_lengths[keyType][keyLength]) == 'number' ? ssh_key_lengths[keyType][keyLength] : 0; |
|
211 var keyName = ssh_key_lengths[keyType].name; |
|
212 var keyFingerprint = (rstr2hex(rstr_md5(Base64.decode(keyEncoded), 8))).split(/(..)/).join(':').replace(/(^:|:$)/g, '').replace(/::/g, ':'); |
|
213 |
|
214 $('<div />') |
|
215 .addClass('btn').addClass('btn-warning').addClass('ssh-key') |
|
216 .append($('<div />') |
|
217 .addClass('pull-right') |
|
218 .append($('<a />') |
|
219 .addClass('close') |
|
220 .html('×') |
|
221 .click(function() |
|
222 { |
|
223 $(this).parents('div.btn.ssh-key').remove(); |
|
224 }) |
|
225 ) |
|
226 ) |
|
227 .append($('<span />') |
|
228 .addClass('label') |
|
229 .append($('<span />') |
|
230 .addClass('type') |
|
231 .text(keyName) |
|
232 ) |
|
233 .append(' ') |
|
234 .append($('<span />') |
|
235 .addClass('bits') |
|
236 .text(keyBits) |
|
237 ) |
|
238 .append('-bit') |
|
239 ) |
|
240 .append(' ') |
|
241 .append($('<span />') |
|
242 .addClass('fingerprint') |
|
243 .text(keyFingerprint) |
|
244 ) |
|
245 .append($('<input />') |
|
246 .attr('type', 'hidden') |
|
247 .attr('name', 'sshPublicKey[]') |
|
248 .val(keyType + ' ' + keyEncoded) |
|
249 ) |
|
250 .prependTo('.put-ssh-keys-here'); |
|
251 |
|
252 $('#newSSHKey').val(''); |
|
253 $('#modal-addssh').modal('hide'); |
|
254 |
|
255 return false; |
|
256 }); |
|
257 } |