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, ':');
+
+ $('<div />')
+ .addClass('btn').addClass('btn-warning').addClass('ssh-key')
+ .append($('<div />')
+ .addClass('pull-right')
+ .append($('<a />')
+ .addClass('close')
+ .html('×')
+ .click(function()
+ {
+ $(this).parents('div.btn.ssh-key').remove();
+ })
+ )
+ )
+ .append($('<span />')
+ .addClass('label')
+ .append($('<span />')
+ .addClass('type')
+ .text(keyName)
+ )
+ .append(' ')
+ .append($('<span />')
+ .addClass('bits')
+ .text(keyBits)
+ )
+ .append('-bit')
+ )
+ .append(' ')
+ .append($('<span />')
+ .addClass('fingerprint')
+ .text(keyFingerprint)
+ )
+ .append($('<input />')
+ .attr('type', 'hidden')
+ .attr('name', 'sshPublicKey[]')
+ .val(keyType + ' ' + keyEncoded)
+ )
+ .prependTo('.put-ssh-keys-here');
+
+ $('#newSSHKey').val('');
+ $('#modal-addssh').modal('hide');
+
+ return false;
+ });
+}