From 3eda313519d73aa1c4235acc78f48bfca3e703a1 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 12 Jun 2018 09:43:16 -0400 Subject: [PATCH 01/11] GUACAMOLE-360: Allow all users access to the session management page. --- .../navigation/services/userPageService.js | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/guacamole/src/main/webapp/app/navigation/services/userPageService.js b/guacamole/src/main/webapp/app/navigation/services/userPageService.js index 4d1e61246..27ae4d740 100644 --- a/guacamole/src/main/webapp/app/navigation/services/userPageService.js +++ b/guacamole/src/main/webapp/app/navigation/services/userPageService.js @@ -71,10 +71,10 @@ angular.module('navigation').factory('userPageService', ['$injector', var settingsPages = generateSettingsPages(permissions); // If user has access to settings pages, return home page and skip - // evaluation for automatic connections. The Preferences page is - // a Settings page and is always visible, so we look for more than - // one to indicate access to administrative pages. - if (settingsPages.length > 1) + // evaluation for automatic connections. The Preferences and Session + // Management pages are "Settings" pages and are always visible, so + // we look for more than two to indicate access to administrative pages. + if (settingsPages.length > 2) return SYSTEM_HOME_PAGE; // Determine whether a connection or balancing group should serve as @@ -257,25 +257,16 @@ angular.module('navigation').factory('userPageService', ['$injector', canManageConnections.push(dataSource); } - // Determine whether the current user needs access to the session management UI or view connection history + // Determine whether the current user needs access to view connection history if ( - // A user must be a system administrator to manage sessions + // A user must be a system administrator to view connection records PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) ) { - canManageSessions.push(dataSource); canViewConnectionRecords.push(dataSource); } }); - // If user can manage sessions, add link to sessions management page - if (canManageSessions.length) { - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_SESSIONS', - url : '/settings/sessions' - })); - } - // If user can manage connections, add links for connection management pages angular.forEach(canViewConnectionRecords, function addConnectionHistoryLink(dataSource) { pages.push(new PageDefinition({ @@ -306,6 +297,12 @@ angular.module('navigation').factory('userPageService', ['$injector', })); }); + // Add link to session management (always accessible) + pages.push(new PageDefinition({ + name : 'USER_MENU.ACTION_MANAGE_SESSIONS', + url : '/settings/sessions' + })); + // Add link to user preferences (always accessible) pages.push(new PageDefinition({ name : 'USER_MENU.ACTION_MANAGE_PREFERENCES', From 85c7b511e15fe68401166054c6cbd1bc1fb63563 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 12 Jun 2018 10:55:28 -0400 Subject: [PATCH 02/11] GUACAMOLE-360: Allow user to kill their own active sessions. --- .../activeconnection/ActiveConnectionService.java | 12 ++++++------ .../settings/directives/guacSettingsSessions.js | 14 ++++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java index 5e459b154..c14d341ba 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java @@ -110,14 +110,12 @@ public class ActiveConnectionService @Override public void deleteObject(ModeledAuthenticatedUser user, String identifier) throws GuacamoleException { - - // Only administrators may delete active connections - if (!user.getUser().isAdministrator()) - throw new GuacamoleSecurityException("Permission denied."); - + // Close connection, if it exists (and we have permission) ActiveConnection activeConnection = retrieveObject(user, identifier); - if (activeConnection != null) { + if (activeConnection != null && + (user.getUser().isAdministrator() + || user.getIdentifier().equals(activeConnection.getUsername()))) { // Close connection if not already closed GuacamoleTunnel tunnel = activeConnection.getTunnel(); @@ -125,6 +123,8 @@ public class ActiveConnectionService tunnel.close(); } + else + throw new GuacamoleSecurityException("Permission denied."); } diff --git a/guacamole/src/main/webapp/app/settings/directives/guacSettingsSessions.js b/guacamole/src/main/webapp/app/settings/directives/guacSettingsSessions.js index 67776f0ab..ccb75c974 100644 --- a/guacamole/src/main/webapp/app/settings/directives/guacSettingsSessions.js +++ b/guacamole/src/main/webapp/app/settings/directives/guacSettingsSessions.js @@ -189,12 +189,14 @@ angular.module('settings').directive('guacSettingsSessions', [function guacSetti var connection = allConnections[dataSource][activeConnection.connectionIdentifier]; // Add wrapper - $scope.wrappers.push(new ActiveConnectionWrapper({ - dataSource : dataSource, - name : connection.name, - startDate : $filter('date')(activeConnection.startDate, sessionDateFormat), - activeConnection : activeConnection - })); + if (activeConnection.username !== null) { + $scope.wrappers.push(new ActiveConnectionWrapper({ + dataSource : dataSource, + name : connection.name, + startDate : $filter('date')(activeConnection.startDate, sessionDateFormat), + activeConnection : activeConnection + })); + } }); }); From 5e165185691fbbdede494abc55f9713cd96a0d31 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 12 Jun 2018 21:17:12 -0400 Subject: [PATCH 03/11] GUACAMOLE-360: Change ActiveConnection elements to use the ObjectPermissionSet mechanism. --- .../ActiveConnectionPermissionService.java | 4 +- .../ActiveConnectionService.java | 59 +++++++++++++++++-- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionPermissionService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionPermissionService.java index 91ad11d7e..261b8bde8 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionPermissionService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionPermissionService.java @@ -96,8 +96,8 @@ public class ActiveConnectionPermissionService String identifier = record.getUUID().toString(); permissions.add(new ObjectPermission(ObjectPermission.Type.READ, identifier)); - // If we're and admin, then we also have DELETE - if (isAdmin) + // If we're and admin, or the connection is ours, then we also have DELETE + if (isAdmin || targetUser.getIdentifier().equals(record.getUsername())) permissions.add(new ObjectPermission(ObjectPermission.Type.DELETE, identifier)); } diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java index c14d341ba..47a97c2eb 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java @@ -34,6 +34,8 @@ import org.apache.guacamole.auth.jdbc.tunnel.ActiveConnectionRecord; import org.apache.guacamole.auth.jdbc.tunnel.GuacamoleTunnelService; import org.apache.guacamole.net.GuacamoleTunnel; import org.apache.guacamole.net.auth.ActiveConnection; +import org.apache.guacamole.net.auth.permission.ObjectPermission; +import org.apache.guacamole.net.auth.permission.ObjectPermissionSet; /** * Service which provides convenience methods for creating, retrieving, and @@ -111,11 +113,10 @@ public class ActiveConnectionService public void deleteObject(ModeledAuthenticatedUser user, String identifier) throws GuacamoleException { - // Close connection, if it exists (and we have permission) + // Close connection, if it exists and we have permission ActiveConnection activeConnection = retrieveObject(user, identifier); - if (activeConnection != null && - (user.getUser().isAdministrator() - || user.getIdentifier().equals(activeConnection.getUsername()))) { + if (activeConnection != null + && hasObjectPermissions(user, identifier, ObjectPermission.Type.DELETE)) { // Close connection if not already closed GuacamoleTunnel tunnel = activeConnection.getTunnel(); @@ -161,5 +162,55 @@ public class ActiveConnectionService throw new GuacamoleSecurityException("Permission denied."); } + + /** + * Retrieve the permission set for the specified user that relates + * to access to active connections. + * + * @param user + * The user for which to retrieve the permission set. + * + * @return + * A permission set associated with the given user that specifies + * the permissions available for active connection objects. + * + * @throws GuacamoleException + * If permission to read permissions for the user is denied. + */ + private ObjectPermissionSet getPermissionSet(ModeledAuthenticatedUser user) + throws GuacamoleException { + return user.getUser().getActiveConnectionPermissions(); + } + + /** + * Return a boolean value representing whether or not a user has the given + * permission available to them on the active connection with the given + * identifier. + * + * @param user + * The user for which the permissions are being queried. + * + * @param identifier + * The identifier of the active connection we are wondering about. + * + * @param type + * The type of permission being requested. + * + * @return + * True if the user has the necessary permission; otherwise false. + * + * @throws GuacamoleException + * If the user does not have access to read permissions. + */ + private boolean hasObjectPermissions(ModeledAuthenticatedUser user, + String identifier, ObjectPermission.Type type) + throws GuacamoleException { + + ObjectPermissionSet permissionSet = getPermissionSet(user); + + return user.getUser().isAdministrator() + || permissionSet.hasPermission(type, identifier); + + } } From bd2d051a19d4cded79f33e1168e97b22ba90fcec Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 12 Jun 2018 21:50:12 -0400 Subject: [PATCH 04/11] GUACAMOLE-360: Make webapp use permission sets for active connection management. --- .../navigation/services/userPageService.js | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/guacamole/src/main/webapp/app/navigation/services/userPageService.js b/guacamole/src/main/webapp/app/navigation/services/userPageService.js index 27ae4d740..07736ed81 100644 --- a/guacamole/src/main/webapp/app/navigation/services/userPageService.js +++ b/guacamole/src/main/webapp/app/navigation/services/userPageService.js @@ -71,10 +71,10 @@ angular.module('navigation').factory('userPageService', ['$injector', var settingsPages = generateSettingsPages(permissions); // If user has access to settings pages, return home page and skip - // evaluation for automatic connections. The Preferences and Session - // Management pages are "Settings" pages and are always visible, so - // we look for more than two to indicate access to administrative pages. - if (settingsPages.length > 2) + // evaluation for automatic connections. The Preferences page is + // a Settings page and is always visible, so we look for more than + // one to indicate access to administrative pages. + if (settingsPages.length > 1) return SYSTEM_HOME_PAGE; // Determine whether a connection or balancing group should serve as @@ -265,8 +265,25 @@ angular.module('navigation').factory('userPageService', ['$injector', canViewConnectionRecords.push(dataSource); } + // Determine whether the current user needs access to view session management + if ( + // Permission to manage active sessions. + PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasActiveConnectionPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) + ) { + canManageSessions.push(dataSource); + } + }); + // If user can manage sessions, add link to sessions management page + if (canManageSessions.length) { + pages.push(new PageDefinition({ + name : 'USER_MENU.ACTION_MANAGE_SESSIONS', + url : '/settings/sessions' + })); + } + // If user can manage connections, add links for connection management pages angular.forEach(canViewConnectionRecords, function addConnectionHistoryLink(dataSource) { pages.push(new PageDefinition({ @@ -297,12 +314,6 @@ angular.module('navigation').factory('userPageService', ['$injector', })); }); - // Add link to session management (always accessible) - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_SESSIONS', - url : '/settings/sessions' - })); - // Add link to user preferences (always accessible) pages.push(new PageDefinition({ name : 'USER_MENU.ACTION_MANAGE_PREFERENCES', From 77da5f5ac5d5d743ccbb902c5c1de905e2ea08b8 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Fri, 15 Jun 2018 21:06:07 -0400 Subject: [PATCH 05/11] GUACAMOLE-360: Clean up style issues. --- .../auth/jdbc/activeconnection/ActiveConnectionService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java index 47a97c2eb..b82adb888 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java @@ -112,7 +112,7 @@ public class ActiveConnectionService @Override public void deleteObject(ModeledAuthenticatedUser user, String identifier) throws GuacamoleException { - + // Close connection, if it exists and we have permission ActiveConnection activeConnection = retrieveObject(user, identifier); if (activeConnection != null @@ -162,7 +162,7 @@ public class ActiveConnectionService throw new GuacamoleSecurityException("Permission denied."); } - + /** * Retrieve the permission set for the specified user that relates * to access to active connections. @@ -181,7 +181,7 @@ public class ActiveConnectionService throws GuacamoleException { return user.getUser().getActiveConnectionPermissions(); } - + /** * Return a boolean value representing whether or not a user has the given * permission available to them on the active connection with the given From d2b40e49046fda7fc729e963f13ef060ecd837eb Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Sat, 16 Jun 2018 20:22:30 -0400 Subject: [PATCH 06/11] GUACAMOLE-360: Fix comment typo. --- .../activeconnection/ActiveConnectionPermissionService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionPermissionService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionPermissionService.java index 261b8bde8..939280e66 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionPermissionService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionPermissionService.java @@ -96,7 +96,7 @@ public class ActiveConnectionPermissionService String identifier = record.getUUID().toString(); permissions.add(new ObjectPermission(ObjectPermission.Type.READ, identifier)); - // If we're and admin, or the connection is ours, then we also have DELETE + // If we're an admin, or the connection is ours, then we can DELETE if (isAdmin || targetUser.getIdentifier().equals(record.getUsername())) permissions.add(new ObjectPermission(ObjectPermission.Type.DELETE, identifier)); From 6a1b55a32708505c146b14a07010d897504ff1ca Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Mon, 18 Jun 2018 19:15:20 -0400 Subject: [PATCH 07/11] GUACAMOLE-360: deleteObject method should follow documented behavior. --- .../auth/jdbc/activeconnection/ActiveConnectionService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java index b82adb888..1d3344db9 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/activeconnection/ActiveConnectionService.java @@ -115,8 +115,10 @@ public class ActiveConnectionService // Close connection, if it exists and we have permission ActiveConnection activeConnection = retrieveObject(user, identifier); - if (activeConnection != null - && hasObjectPermissions(user, identifier, ObjectPermission.Type.DELETE)) { + if (activeConnection == null) + return; + + if (hasObjectPermissions(user, identifier, ObjectPermission.Type.DELETE)) { // Close connection if not already closed GuacamoleTunnel tunnel = activeConnection.getTunnel(); From ef7e28d168d6e1dc68d71d50421e20c558cd4daa Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Mon, 18 Jun 2018 21:12:20 -0400 Subject: [PATCH 08/11] GUACAMOLE-360: Make session management page always available. --- .../navigation/services/userPageService.js | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/guacamole/src/main/webapp/app/navigation/services/userPageService.js b/guacamole/src/main/webapp/app/navigation/services/userPageService.js index 07736ed81..7bdf65476 100644 --- a/guacamole/src/main/webapp/app/navigation/services/userPageService.js +++ b/guacamole/src/main/webapp/app/navigation/services/userPageService.js @@ -72,9 +72,11 @@ angular.module('navigation').factory('userPageService', ['$injector', // If user has access to settings pages, return home page and skip // evaluation for automatic connections. The Preferences page is - // a Settings page and is always visible, so we look for more than - // one to indicate access to administrative pages. - if (settingsPages.length > 1) + // a Settings page and is always visible, and the Session management + // page is also available to all users so that they can kill their + // own session. We look for more than those two pages to determine + // if we should go to the home page. + if (settingsPages.length > 2) return SYSTEM_HOME_PAGE; // Determine whether a connection or balancing group should serve as @@ -265,25 +267,8 @@ angular.module('navigation').factory('userPageService', ['$injector', canViewConnectionRecords.push(dataSource); } - // Determine whether the current user needs access to view session management - if ( - // Permission to manage active sessions. - PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasActiveConnectionPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) - ) { - canManageSessions.push(dataSource); - } - }); - // If user can manage sessions, add link to sessions management page - if (canManageSessions.length) { - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_SESSIONS', - url : '/settings/sessions' - })); - } - // If user can manage connections, add links for connection management pages angular.forEach(canViewConnectionRecords, function addConnectionHistoryLink(dataSource) { pages.push(new PageDefinition({ @@ -320,6 +305,12 @@ angular.module('navigation').factory('userPageService', ['$injector', url : '/settings/preferences' })); + // Add link to Session management (always accessible) + pages.push(new PageDefinition({ + name : 'USER_MENU.ACTION_MANAGE_SESSIONS', + url : '/settings/sessions' + })); + return pages; }; From c9975f26939726b6908461effaa7cb9805ccd5c4 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 19 Jun 2018 06:11:09 -0400 Subject: [PATCH 09/11] GUACAMOLE-360: Order pages correctly; remove unused variable. --- .../app/navigation/services/userPageService.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/guacamole/src/main/webapp/app/navigation/services/userPageService.js b/guacamole/src/main/webapp/app/navigation/services/userPageService.js index 7bdf65476..bd401daa1 100644 --- a/guacamole/src/main/webapp/app/navigation/services/userPageService.js +++ b/guacamole/src/main/webapp/app/navigation/services/userPageService.js @@ -196,7 +196,6 @@ angular.module('navigation').factory('userPageService', ['$injector', var canManageUsers = []; var canManageConnections = []; var canViewConnectionRecords = []; - var canManageSessions = []; // Inspect the contents of each provided permission set angular.forEach(authenticationService.getAvailableDataSources(), function inspectPermissions(dataSource) { @@ -269,6 +268,12 @@ angular.module('navigation').factory('userPageService', ['$injector', }); + // Add link to Session management (always accessible) + pages.push(new PageDefinition({ + name : 'USER_MENU.ACTION_MANAGE_SESSIONS', + url : '/settings/sessions' + })); + // If user can manage connections, add links for connection management pages angular.forEach(canViewConnectionRecords, function addConnectionHistoryLink(dataSource) { pages.push(new PageDefinition({ @@ -305,12 +310,6 @@ angular.module('navigation').factory('userPageService', ['$injector', url : '/settings/preferences' })); - // Add link to Session management (always accessible) - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_SESSIONS', - url : '/settings/sessions' - })); - return pages; }; From 17ada68fae1f6789f8ff625a12e3c96572b49352 Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 19 Jun 2018 14:56:54 -0400 Subject: [PATCH 10/11] GUACAMOLE-360: Update help text for session management. --- guacamole/src/main/webapp/layouts/es-es-qwerty.json | 2 +- guacamole/src/main/webapp/translations/de.json | 2 +- guacamole/src/main/webapp/translations/en.json | 2 +- guacamole/src/main/webapp/translations/es.json | 2 +- guacamole/src/main/webapp/translations/fr.json | 4 +++- guacamole/src/main/webapp/translations/it.json | 2 +- guacamole/src/main/webapp/translations/nl.json | 2 +- guacamole/src/main/webapp/translations/no.json | 2 +- guacamole/src/main/webapp/translations/ru.json | 2 +- guacamole/src/main/webapp/translations/zh.json | 2 +- 10 files changed, 12 insertions(+), 10 deletions(-) diff --git a/guacamole/src/main/webapp/layouts/es-es-qwerty.json b/guacamole/src/main/webapp/layouts/es-es-qwerty.json index 0a1e7d7c4..dc330e598 100644 --- a/guacamole/src/main/webapp/layouts/es-es-qwerty.json +++ b/guacamole/src/main/webapp/layouts/es-es-qwerty.json @@ -1,4 +1,4 @@ -{ +{ "language" : "es_ES", "type" : "qwerty", diff --git a/guacamole/src/main/webapp/translations/de.json b/guacamole/src/main/webapp/translations/de.json index 90953e5c7..9eaa190e0 100644 --- a/guacamole/src/main/webapp/translations/de.json +++ b/guacamole/src/main/webapp/translations/de.json @@ -621,7 +621,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Alle aktiven Guacamole Sitzungen werden hier aufgelistet. Wenn Sie eine oder mehrere Sitzungen beenden wollen, wählen Sie diese Sitzung durch Aktivierung der nebenstehende Box und klicken auf \"Beende Sitzung\". Beendung einer Sitzung trennt den Benutzer von dessen Verbindung unverzüglich.", + "HELP_SESSIONS" : "Ihre derzeit aktiven Guacamole-Sitzungen sind hier aufgelistet, und Administratoren können derzeit aktive Sitzungen für alle Benutzer sehen. Wenn Sie eine oder mehrere Sitzungen beenden wollen, wählen Sie diese Sitzung durch Aktivierung der nebenstehende Box und klicken auf \"Beende Sitzung\". Beendung einer Sitzung trennt den Benutzer von dessen Verbindung unverzüglich.", "INFO_NO_SESSIONS" : "Keine aktiven Sitzungen", diff --git a/guacamole/src/main/webapp/translations/en.json b/guacamole/src/main/webapp/translations/en.json index 1f65d6b80..e2d6f5e51 100644 --- a/guacamole/src/main/webapp/translations/en.json +++ b/guacamole/src/main/webapp/translations/en.json @@ -750,7 +750,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "All currently-active Guacamole sessions are listed here. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.", + "HELP_SESSIONS" : "Your currently-active Guacamole sessions are listed here, and Administrators will be able to see currently-active sessions for all users. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.", "INFO_NO_SESSIONS" : "No active sessions", diff --git a/guacamole/src/main/webapp/translations/es.json b/guacamole/src/main/webapp/translations/es.json index 283779a1f..bcccfc9b3 100644 --- a/guacamole/src/main/webapp/translations/es.json +++ b/guacamole/src/main/webapp/translations/es.json @@ -695,7 +695,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Aquí se listan todas las sesiones activas que tiene actualmente Guacamole. Si quiere finalizar una o mas sesiones, marque la casilla correspondiente a esa/s sesión/es y haga clic en \"Finalizar Sesiones\". Si finaliza una sesión desconectará inmediatamente al usuario de la conexión asociada.", + "HELP_SESSIONS" : "Sus sesiones de Guacamole actualmente activas se enumeran aquí, y los administradores podrán ver las sesiones actualmente activas para todos los usuarios. Si quiere finalizar una o mas sesiones, marque la casilla correspondiente a esa/s sesión/es y haga clic en \"Finalizar Sesiones\". Si finaliza una sesión desconectará inmediatamente al usuario de la conexión asociada.", "INFO_NO_SESSIONS" : "No hay sesiones activas", diff --git a/guacamole/src/main/webapp/translations/fr.json b/guacamole/src/main/webapp/translations/fr.json index 8ebbd36cf..7cf98f4e8 100644 --- a/guacamole/src/main/webapp/translations/fr.json +++ b/guacamole/src/main/webapp/translations/fr.json @@ -624,7 +624,9 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Toutes les connexions actives Guacamole sont listées ici. Si vous souhaitez en fermer une ou plusieurs, sélectionner les et cliquer sur \"Fermer Sessions\". La fermeture d'une session déconnectera immédiatement l'utilisateur.", + "HELP_SESSIONS" : " +137/5000 +Vos sessions Guacamole actuellement actives sont répertoriées ici et les administrateurs pourront voir les sessions actuellement actives pour tous les utilisateurs. Si vous souhaitez en fermer une ou plusieurs, sélectionner les et cliquer sur \"Fermer Sessions\". La fermeture d'une session déconnectera immédiatement l'utilisateur.", "INFO_NO_SESSIONS" : "Pas de session ouverte", diff --git a/guacamole/src/main/webapp/translations/it.json b/guacamole/src/main/webapp/translations/it.json index 5b3f64178..767ef8771 100644 --- a/guacamole/src/main/webapp/translations/it.json +++ b/guacamole/src/main/webapp/translations/it.json @@ -566,7 +566,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "All currently-active Guacamole sessions are listed here. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.", + "HELP_SESSIONS" : "Le tue sessioni Guacamole attualmente attive sono elencate qui e gli amministratori potranno vedere le sessioni attualmente attive per tutti gli utenti. Se desideri uccidere una o più sessioni, seleziona la casella accanto a quelle sessioni e fai clic su \"Uccidi sessioni \". L'uccisione di una sessione interromperà immediatamente l'utente dalla connessione associata.", "INFO_NO_SESSIONS" : "Nessuna sessione attiva", diff --git a/guacamole/src/main/webapp/translations/nl.json b/guacamole/src/main/webapp/translations/nl.json index 69a789ac6..f388e0573 100644 --- a/guacamole/src/main/webapp/translations/nl.json +++ b/guacamole/src/main/webapp/translations/nl.json @@ -654,7 +654,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Alle Guacamole sessies die op dit moment actief zijn worden hier getoond. Als u een of meerdere sessies wilt beeindigen, vink die sessie(s) dan aan en klik op \"Beeindig Sessies\". Door het verbreken van een sessie verliest de gebruiker ogenblikkelijk het contact met die sessie(s).", + "HELP_SESSIONS" : "Uw momenteel actieve Guacamole-sessies worden hier weergegeven en beheerders kunnen momenteel actieve sessies voor alle gebruikers zien. Als u een of meerdere sessies wilt beeindigen, vink die sessie(s) dan aan en klik op \"Beeindig Sessies\". Door het verbreken van een sessie verliest de gebruiker ogenblikkelijk het contact met die sessie(s).", "INFO_NO_SESSIONS" : "Geen actieve sessies", diff --git a/guacamole/src/main/webapp/translations/no.json b/guacamole/src/main/webapp/translations/no.json index 30ea8719d..f1c6944ee 100644 --- a/guacamole/src/main/webapp/translations/no.json +++ b/guacamole/src/main/webapp/translations/no.json @@ -635,7 +635,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Alle aktive Guacamolesesjoner er listet opp her. Dersom du ønsker å avbryte en eller flere sesjoner haker du av boksen ved siden av sesjonen og klikker \"Avbryt sesjoner\". Avbrytes en sesjon vil brukeren umiddelbart kobles av den aktuelle sesjonen.", + "HELP_SESSIONS" : "Dine nåværende Guacamole-økter er oppført her, og administratorer kan se øyeblikkelig aktive økter for alle brukere. Dersom du ønsker å avbryte en eller flere sesjoner haker du av boksen ved siden av sesjonen og klikker \"Avbryt sesjoner\". Avbrytes en sesjon vil brukeren umiddelbart kobles av den aktuelle sesjonen.", "INFO_NO_SESSIONS" : "Ingen aktive sesjoner", diff --git a/guacamole/src/main/webapp/translations/ru.json b/guacamole/src/main/webapp/translations/ru.json index 4f045257e..67d90ac4e 100644 --- a/guacamole/src/main/webapp/translations/ru.json +++ b/guacamole/src/main/webapp/translations/ru.json @@ -547,7 +547,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Все активные в настоящий момент сессии Guacamole представлены здесь. Если вы хотите завершить одну или несколько сессий, выберите нужные сессии и нажмите на \"Завершить сессии\". Принудительное завершение сессий приведет к немедленному отключению пользователей, которые ими пользуются.", + "HELP_SESSIONS" : "Здесь перечислены текущие сеансы Guacamole, и администраторы смогут видеть активные сеансы для всех пользователей. Если вы хотите завершить одну или несколько сессий, выберите нужные сессии и нажмите на \"Завершить сессии\". Принудительное завершение сессий приведет к немедленному отключению пользователей, которые ими пользуются.", "INFO_NO_SESSIONS" : "Нет активных сессий", diff --git a/guacamole/src/main/webapp/translations/zh.json b/guacamole/src/main/webapp/translations/zh.json index d0d68f7f4..541ad5bca 100644 --- a/guacamole/src/main/webapp/translations/zh.json +++ b/guacamole/src/main/webapp/translations/zh.json @@ -732,7 +732,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "下表中是所有当前活动的Guacamole会话。如需终止一个或多个会话,勾选目标会话并点击“终止会话”。终止会话会立即断开对应用户的连接。", + "HELP_SESSIONS" : "此处列出您当前活动的Guacamole会话,并且管理员将能够查看所有用户的当前活动会话。如需终止一个或多个会话,勾选目标会话并点击“终止会话”。终止会话会立即断开对应用户的连接。", "INFO_NO_SESSIONS" : "无活动会话", From 9aa369d040b41124652ade98c71c0108008f550e Mon Sep 17 00:00:00 2001 From: Nick Couchman Date: Tue, 19 Jun 2018 20:07:16 -0400 Subject: [PATCH 11/11] GUACAMOLE-360: Another tweak to the translation for the session management help. --- guacamole/src/main/webapp/translations/de.json | 2 +- guacamole/src/main/webapp/translations/en.json | 2 +- guacamole/src/main/webapp/translations/es.json | 2 +- guacamole/src/main/webapp/translations/fr.json | 4 +--- guacamole/src/main/webapp/translations/it.json | 2 +- guacamole/src/main/webapp/translations/nl.json | 2 +- guacamole/src/main/webapp/translations/no.json | 2 +- guacamole/src/main/webapp/translations/ru.json | 2 +- guacamole/src/main/webapp/translations/zh.json | 2 +- 9 files changed, 9 insertions(+), 11 deletions(-) diff --git a/guacamole/src/main/webapp/translations/de.json b/guacamole/src/main/webapp/translations/de.json index 9eaa190e0..9e24ba7b7 100644 --- a/guacamole/src/main/webapp/translations/de.json +++ b/guacamole/src/main/webapp/translations/de.json @@ -621,7 +621,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Ihre derzeit aktiven Guacamole-Sitzungen sind hier aufgelistet, und Administratoren können derzeit aktive Sitzungen für alle Benutzer sehen. Wenn Sie eine oder mehrere Sitzungen beenden wollen, wählen Sie diese Sitzung durch Aktivierung der nebenstehende Box und klicken auf \"Beende Sitzung\". Beendung einer Sitzung trennt den Benutzer von dessen Verbindung unverzüglich.", + "HELP_SESSIONS" : "Diese Seite wird mit derzeit aktiven Verbindungen gefüllt. Die aufgelisteten Verbindungen und die Möglichkeit, diese Verbindungen zu beenden, hängen von Ihrer Zugriffsebene ab. Wenn Sie eine oder mehrere Sitzungen beenden wollen, wählen Sie diese Sitzung durch Aktivierung der nebenstehende Box und klicken auf \"Beende Sitzung\". Beendung einer Sitzung trennt den Benutzer von dessen Verbindung unverzüglich.", "INFO_NO_SESSIONS" : "Keine aktiven Sitzungen", diff --git a/guacamole/src/main/webapp/translations/en.json b/guacamole/src/main/webapp/translations/en.json index e2d6f5e51..050294f65 100644 --- a/guacamole/src/main/webapp/translations/en.json +++ b/guacamole/src/main/webapp/translations/en.json @@ -750,7 +750,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Your currently-active Guacamole sessions are listed here, and Administrators will be able to see currently-active sessions for all users. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.", + "HELP_SESSIONS" : "This page will be populated with currently-active connections. The connections listed and the ability to kill those connections is dependent upon your access level. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.", "INFO_NO_SESSIONS" : "No active sessions", diff --git a/guacamole/src/main/webapp/translations/es.json b/guacamole/src/main/webapp/translations/es.json index bcccfc9b3..f2545bb25 100644 --- a/guacamole/src/main/webapp/translations/es.json +++ b/guacamole/src/main/webapp/translations/es.json @@ -695,7 +695,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Sus sesiones de Guacamole actualmente activas se enumeran aquí, y los administradores podrán ver las sesiones actualmente activas para todos los usuarios. Si quiere finalizar una o mas sesiones, marque la casilla correspondiente a esa/s sesión/es y haga clic en \"Finalizar Sesiones\". Si finaliza una sesión desconectará inmediatamente al usuario de la conexión asociada.", + "HELP_SESSIONS" : "Esta página se completará con las conexiones actualmente activas. Las conexiones enumeradas y la capacidad de eliminar esas conexiones dependen de su nivel de acceso. Si quiere finalizar una o mas sesiones, marque la casilla correspondiente a esa/s sesión/es y haga clic en \"Finalizar Sesiones\". Si finaliza una sesión desconectará inmediatamente al usuario de la conexión asociada.", "INFO_NO_SESSIONS" : "No hay sesiones activas", diff --git a/guacamole/src/main/webapp/translations/fr.json b/guacamole/src/main/webapp/translations/fr.json index 7cf98f4e8..94071786f 100644 --- a/guacamole/src/main/webapp/translations/fr.json +++ b/guacamole/src/main/webapp/translations/fr.json @@ -624,9 +624,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : " -137/5000 -Vos sessions Guacamole actuellement actives sont répertoriées ici et les administrateurs pourront voir les sessions actuellement actives pour tous les utilisateurs. Si vous souhaitez en fermer une ou plusieurs, sélectionner les et cliquer sur \"Fermer Sessions\". La fermeture d'une session déconnectera immédiatement l'utilisateur.", + "HELP_SESSIONS" : "Cette page sera remplie avec des connexions actuellement actives. Les connexions répertoriées et la possibilité de supprimer ces connexions dépendent de votre niveau d'accès. Si vous souhaitez en fermer une ou plusieurs, sélectionner les et cliquer sur \"Fermer Sessions\". La fermeture d'une session déconnectera immédiatement l'utilisateur.", "INFO_NO_SESSIONS" : "Pas de session ouverte", diff --git a/guacamole/src/main/webapp/translations/it.json b/guacamole/src/main/webapp/translations/it.json index 767ef8771..442e70927 100644 --- a/guacamole/src/main/webapp/translations/it.json +++ b/guacamole/src/main/webapp/translations/it.json @@ -566,7 +566,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Le tue sessioni Guacamole attualmente attive sono elencate qui e gli amministratori potranno vedere le sessioni attualmente attive per tutti gli utenti. Se desideri uccidere una o più sessioni, seleziona la casella accanto a quelle sessioni e fai clic su \"Uccidi sessioni \". L'uccisione di una sessione interromperà immediatamente l'utente dalla connessione associata.", + "HELP_SESSIONS" : "Questa pagina verrà popolata con connessioni attualmente attive. Le connessioni elencate e la possibilità di uccidere tali connessioni dipende dal tuo livello di accesso. Se desideri uccidere una o più sessioni, seleziona la casella accanto a quelle sessioni e fai clic su \"Uccidi sessioni \". L'uccisione di una sessione interromperà immediatamente l'utente dalla connessione associata.", "INFO_NO_SESSIONS" : "Nessuna sessione attiva", diff --git a/guacamole/src/main/webapp/translations/nl.json b/guacamole/src/main/webapp/translations/nl.json index f388e0573..00ed1f633 100644 --- a/guacamole/src/main/webapp/translations/nl.json +++ b/guacamole/src/main/webapp/translations/nl.json @@ -654,7 +654,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Uw momenteel actieve Guacamole-sessies worden hier weergegeven en beheerders kunnen momenteel actieve sessies voor alle gebruikers zien. Als u een of meerdere sessies wilt beeindigen, vink die sessie(s) dan aan en klik op \"Beeindig Sessies\". Door het verbreken van een sessie verliest de gebruiker ogenblikkelijk het contact met die sessie(s).", + "HELP_SESSIONS" : "Deze pagina wordt gevuld met momenteel actieve verbindingen. De vermelde verbindingen en de mogelijkheid om die verbindingen te doden, zijn afhankelijk van uw toegangsniveau. Als u een of meerdere sessies wilt beeindigen, vink die sessie(s) dan aan en klik op \"Beeindig Sessies\". Door het verbreken van een sessie verliest de gebruiker ogenblikkelijk het contact met die sessie(s).", "INFO_NO_SESSIONS" : "Geen actieve sessies", diff --git a/guacamole/src/main/webapp/translations/no.json b/guacamole/src/main/webapp/translations/no.json index f1c6944ee..bdec13027 100644 --- a/guacamole/src/main/webapp/translations/no.json +++ b/guacamole/src/main/webapp/translations/no.json @@ -635,7 +635,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Dine nåværende Guacamole-økter er oppført her, og administratorer kan se øyeblikkelig aktive økter for alle brukere. Dersom du ønsker å avbryte en eller flere sesjoner haker du av boksen ved siden av sesjonen og klikker \"Avbryt sesjoner\". Avbrytes en sesjon vil brukeren umiddelbart kobles av den aktuelle sesjonen.", + "HELP_SESSIONS" : "Denne siden vil bli fylt med nåværende aktive forbindelser. Tilkoblingene oppført og evnen til å drepe disse tilkoblingene er avhengig av tilgangsnivået ditt. Dersom du ønsker å avbryte en eller flere sesjoner haker du av boksen ved siden av sesjonen og klikker \"Avbryt sesjoner\". Avbrytes en sesjon vil brukeren umiddelbart kobles av den aktuelle sesjonen.", "INFO_NO_SESSIONS" : "Ingen aktive sesjoner", diff --git a/guacamole/src/main/webapp/translations/ru.json b/guacamole/src/main/webapp/translations/ru.json index 67d90ac4e..d6b2d4760 100644 --- a/guacamole/src/main/webapp/translations/ru.json +++ b/guacamole/src/main/webapp/translations/ru.json @@ -547,7 +547,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "Здесь перечислены текущие сеансы Guacamole, и администраторы смогут видеть активные сеансы для всех пользователей. Если вы хотите завершить одну или несколько сессий, выберите нужные сессии и нажмите на \"Завершить сессии\". Принудительное завершение сессий приведет к немедленному отключению пользователей, которые ими пользуются.", + "HELP_SESSIONS" : "Эта страница будет заполнена активными в настоящее время соединениями. Перечисленные соединения и возможность убивать эти соединения зависят от вашего уровня доступа. Если вы хотите завершить одну или несколько сессий, выберите нужные сессии и нажмите на \"Завершить сессии\". Принудительное завершение сессий приведет к немедленному отключению пользователей, которые ими пользуются.", "INFO_NO_SESSIONS" : "Нет активных сессий", diff --git a/guacamole/src/main/webapp/translations/zh.json b/guacamole/src/main/webapp/translations/zh.json index 541ad5bca..dae03ec1d 100644 --- a/guacamole/src/main/webapp/translations/zh.json +++ b/guacamole/src/main/webapp/translations/zh.json @@ -732,7 +732,7 @@ "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - "HELP_SESSIONS" : "此处列出您当前活动的Guacamole会话,并且管理员将能够查看所有用户的当前活动会话。如需终止一个或多个会话,勾选目标会话并点击“终止会话”。终止会话会立即断开对应用户的连接。", + "HELP_SESSIONS" : "该页面将填充当前活动的连接。 列出的连接和终止连接的能力取决于您的访问级别。如需终止一个或多个会话,勾选目标会话并点击“终止会话”。终止会话会立即断开对应用户的连接。", "INFO_NO_SESSIONS" : "无活动会话",