diff -r a044870a9d3d -r 2212b2ded8bf packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/res/user-create-form.js --- a/packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/res/user-create-form.js Fri Jan 11 00:32:54 2013 -0500 +++ b/packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/res/user-create-form.js Fri Jan 11 05:41:41 2013 -0500 @@ -90,6 +90,8 @@ } }); + setupSSHKeyUI(); + $('.show-tooltip').tooltip(); }); @@ -141,3 +143,115 @@ }); $('#userResetForm').modal('show'); } + +function binToByteArray(str) +{ + var arr = [], str = escape(str); + + for ( var i = 0; i < str.length; i++ ) + { + var chr = str.charAt(i); + switch(chr) + { + case '%': + if ( str.charAt(i+1) == 'u' && str.substr(i+2, 4).match(/[A-F0-9]{4}/) ) + { + arr.push(parseInt(str.substr(i+2, 2), 16)); + arr.push(parseInt(str.substr(i+4, 2), 16)); + i += 4; + break; + } + else if ( str.substr(i+1, 2).match(/[A-F0-9]{2}/) ) + { + arr.push(parseInt(str.substr(i+1, 2), 16)); + i += 2; + break; + } + default: + arr.push(str.charCodeAt(i)); + } + } + + return arr; +} + +function setupSSHKeyUI() +{ + if ( typeof(document.forms.addSSHKey) !== 'object' ) + return; + + $('div.btn.ssh-key a.close').click(function() + { + $(this).parents('div.btn.ssh-key').remove(); + }); + + $(document.forms.addSSHKey).submit(function() + { + $('#modal-addssh div.control-group').removeClass('error'); + + var keyValue = $('#newSSHKey').val(); + if ( (keyValue.split(/ /)).length < 2 ) + { + $('#modal-addssh div.control-group').addClass('error'); + return false; + } + + var keyValue = keyValue.split(/ /); + var keyType = keyValue[0]; + var keyEncoded = keyValue[1]; + + if ( typeof(ssh_key_lengths[keyType]) != 'object' ) + { + $('#modal-addssh div.control-group').addClass('error'); + return false; + } + + var keyLength = keyEncoded.length * 0.75 - keyEncoded.replace(/[^=]/g, '').length; + var keyBits = typeof(ssh_key_lengths[keyType][keyLength]) == 'number' ? ssh_key_lengths[keyType][keyLength] : 0; + var keyName = ssh_key_lengths[keyType].name; + var keyFingerprint = (rstr2hex(rstr_md5(Base64.decode(keyEncoded), 8))).split(/(..)/).join(':').replace(/(^:|:$)/g, '').replace(/::/g, ':'); + + $('
') + .addClass('btn').addClass('btn-warning').addClass('ssh-key') + .append($('
') + .addClass('pull-right') + .append($('') + .addClass('close') + .html('×') + .click(function() + { + $(this).parents('div.btn.ssh-key').remove(); + }) + ) + ) + .append($('') + .addClass('label') + .append($('') + .addClass('type') + .text(keyName) + ) + .append(' ') + .append($('') + .addClass('bits') + .text(keyBits) + ) + .append('-bit') + ) + .append(' ') + .append($('') + .addClass('fingerprint') + .text(keyFingerprint) + ) + .append($('') + .attr('type', 'hidden') + .attr('name', 'sshPublicKey[]') + .val(keyType + ' ' + keyEncoded) + ) + .prependTo('.put-ssh-keys-here'); + + $('#newSSHKey').val(''); + $('#modal-addssh').modal('hide'); + + return false; + }); +}