From 7f17ce4e88a3c91e03f8313a855850e6e930def4 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 10 Feb 2013 13:22:58 -0800 Subject: [PATCH] #268: Implement user management. --- guacamole/src/main/webapp/admin.xhtml | 245 ++++++++++++++++++++---- guacamole/src/main/webapp/styles/ui.css | 2 +- 2 files changed, 204 insertions(+), 43 deletions(-) diff --git a/guacamole/src/main/webapp/admin.xhtml b/guacamole/src/main/webapp/admin.xhtml index 857f0ff90..17ff734b4 100644 --- a/guacamole/src/main/webapp/admin.xhtml +++ b/guacamole/src/main/webapp/admin.xhtml @@ -42,16 +42,13 @@ passwords can be changed.

- -
+
+
+

Connections

@@ -68,6 +65,9 @@
+
+
+
@@ -88,51 +88,212 @@ return false; } - var connections = document.getElementById("connections"); - var users = document.getElementById("users"); + // Elements + var connection_list = document.getElementById("connection-list"); + var user_list = document.getElementById("user-list"); + var add_connection = document.getElementById("add-connection"); + var connection_id = document.getElementById("connection-id"); + var protocol = document.getElementById("protocol"); + var add_user = document.getElementById("add-user"); + var username = document.getElementById("username"); - // Show admin elements if admin permissions available - var permissions = GuacamoleService.Permissions.list(); + function reset_admin_ui() { - if (permissions.create_connection - || hasEntry(permissions.update_connection) - || hasEntry(permissions.remove_connection) - || hasEntry(permissions.administer_connection)) - GuacUI.addClass(document.body, "manage-connections"); + /* + * Show admin elements if admin permissions available + */ - if (permissions.create_user - || hasEntry(permissions.update_user) - || hasEntry(permissions.remove_user) - || hasEntry(permissions.administer_user)) - GuacUI.addClass(document.body, "manage-users"); + // Get permissions + var permissions = GuacamoleService.Permissions.list(); - // Connection creation - if (permissions.create_connection) { - GuacUI.addClass(document.body, "add-connections"); + // Connection management + if (permissions.create_connection + || hasEntry(permissions.update_connection) + || hasEntry(permissions.remove_connection) + || hasEntry(permissions.administer_connection)) + GuacUI.addClass(document.body, "manage-connections"); + else + GuacUI.removeClass(document.body, "manage-connections"); - var add_connection = document.getElementById("add-connection"); - var connection_id = document.getElementById("connection-id"); - var protocol = document.getElementById("protocol"); + // User management + if (permissions.create_user + || hasEntry(permissions.update_user) + || hasEntry(permissions.remove_user) + || hasEntry(permissions.administer_user)) + GuacUI.addClass(document.body, "manage-users"); + else + GuacUI.removeClass(document.body, "manage-users"); - add_connection.onclick = function() { - var connection = new GuacamoleService.Connection( - protocol.value, connection_id.value); - GuacamoleService.Connections.create(connection); - }; + // Connection creation + if (permissions.create_connection) { + GuacUI.addClass(document.body, "add-connections"); + + add_connection.onclick = function() { + + // Try to create connection + try { + var connection = new GuacamoleService.Connection( + protocol.value, connection_id.value); + GuacamoleService.Connections.create(connection); + connection_id.value = ""; + reset_admin_ui(); + } + + // Alert on failure + catch (e) { + alert(e.message); + } + + }; + + } + + // User creation + if (permissions.create_user) { + GuacUI.addClass(document.body, "add-users"); + + add_user.onclick = function() { + + // Attempt to create user + try { + GuacamoleService.Users.create(username.value); + username.value = ""; + reset_admin_ui(); + } + + // Alert on failure + catch (e) { + alert(e.message); + } + + }; + + } + + /* + * Add readable users. + */ + + var name; + var selected_user = null; + + // Add users to list + user_list.innerHTML = ""; + for (name in permissions.read_user) {(function(name){ + + var item = new GuacAdmin.ListItem("user", name); + var item_element = item.getElement(); + user_list.appendChild(item_element); + + item_element.onclick = function() { + + // Ignore clicks if any item is selected + if (selected_user) return; + else selected_user = name; + + // Get user permissions + var user_perms = GuacamoleService.Permissions.list(name); + + // Load buttons + var buttons = [new GuacAdmin.Button("Save"), + new GuacAdmin.Button("Cancel")]; + + if (name in permissions.remove_user) + buttons.push(new GuacAdmin.Button("Delete")); + + // User property form. + var user_properties = new GuacAdmin.Form( + + /* Fields */ + [new GuacAdmin.Field.PASSWORD("Password:", [], + ["f12a1930-7195-11e2-bcfd-0800200c9a66"]), + + new GuacAdmin.Field.PASSWORD("Re-enter Password:", [], + ["f12a1930-7195-11e2-bcfd-0800200c9a66"]), + + new GuacAdmin.Field.LIST("Connections:", + Object.keys(permissions.read_connection), + Object.keys(user_perms.read_connection))], + + /* Buttons */ + buttons + + ); + + // Select + GuacUI.addClass(user_list, "disabled"); + GuacUI.addClass(item_element, "selected"); + + // Handle buttons + user_properties.onaction = function(title, fields) { + + try { + + if (title == "Save") { + + // Get passwords + var password = fields[0][0]; + var reentered_password = fields[1][0]; + + // Check that passwords match + if (password != reentered_password) + throw new Error("Passwords do not match."); + + // Set user permissions + user_perms.read_connection = {}; + var connections = fields[2]; + for (var i=0; i diff --git a/guacamole/src/main/webapp/styles/ui.css b/guacamole/src/main/webapp/styles/ui.css index eaf453913..59edfbbbc 100644 --- a/guacamole/src/main/webapp/styles/ui.css +++ b/guacamole/src/main/webapp/styles/ui.css @@ -202,7 +202,7 @@ div.section { border: 1px solid rgba(0, 0, 0, 0.25); } -.list-item.selected.icon { +.list-item.selected .icon { opacity: 1.0; }