packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/res/user-create-form.js
changeset 4 2212b2ded8bf
parent 0 3906ca745819
--- 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('&times;')
+						.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;
+		});
+}