diff --git a/guacamole/src/main/webapp/app/client/types/ManagedClient.js b/guacamole/src/main/webapp/app/client/types/ManagedClient.js index 45512086d..800eaf431 100644 --- a/guacamole/src/main/webapp/app/client/types/ManagedClient.js +++ b/guacamole/src/main/webapp/app/client/types/ManagedClient.js @@ -36,21 +36,22 @@ angular.module('client').factory('ManagedClient', ['$rootScope', '$injector', var ManagedShareLink = $injector.get('ManagedShareLink'); // Required services - var $document = $injector.get('$document'); - var $q = $injector.get('$q'); - var $rootScope = $injector.get('$rootScope'); - var $window = $injector.get('$window'); - var authenticationService = $injector.get('authenticationService'); - var connectionGroupService = $injector.get('connectionGroupService'); - var connectionService = $injector.get('connectionService'); - var preferenceService = $injector.get('preferenceService'); - var requestService = $injector.get('requestService'); - var schemaService = $injector.get('schemaService'); - var tunnelService = $injector.get('tunnelService'); - var guacAudio = $injector.get('guacAudio'); - var guacHistory = $injector.get('guacHistory'); - var guacImage = $injector.get('guacImage'); - var guacVideo = $injector.get('guacVideo'); + var $document = $injector.get('$document'); + var $q = $injector.get('$q'); + var $rootScope = $injector.get('$rootScope'); + var $window = $injector.get('$window'); + var activeConnectionService = $injector.get('activeConnectionService'); + var authenticationService = $injector.get('authenticationService'); + var connectionGroupService = $injector.get('connectionGroupService'); + var connectionService = $injector.get('connectionService'); + var preferenceService = $injector.get('preferenceService'); + var requestService = $injector.get('requestService'); + var schemaService = $injector.get('schemaService'); + var tunnelService = $injector.get('tunnelService'); + var guacAudio = $injector.get('guacAudio'); + var guacHistory = $injector.get('guacHistory'); + var guacImage = $injector.get('guacImage'); + var guacVideo = $injector.get('guacVideo'); /** * The minimum amount of time to wait between updates to the client @@ -600,6 +601,29 @@ angular.module('client').factory('ManagedClient', ['$rootScope', '$injector', }, requestService.WARN); } + // If using an active connection, pull corresponding connection, then + // pull connection name and protocol information from that + else if (clientIdentifier.type === ClientIdentifier.Types.ACTIVE_CONNECTION) { + activeConnectionService.getActiveConnection(clientIdentifier.dataSource, clientIdentifier.id) + .then(function activeConnectionRetrieved(activeConnection) { + + // Attempt to retrieve connection details only if the + // underlying connection is known + if (activeConnection.connectionIdentifier) { + $q.all({ + connection : connectionService.getConnection(clientIdentifier.dataSource, activeConnection.connectionIdentifier), + protocols : schemaService.getProtocols(clientIdentifier.dataSource) + }) + .then(function dataRetrieved(values) { + managedClient.name = managedClient.title = values.connection.name; + managedClient.protocol = values.connection.protocol; + managedClient.forms = values.protocols[values.connection.protocol].connectionForms; + }, requestService.WARN); + } + + }, requestService.WARN); + } + return managedClient; }; diff --git a/guacamole/src/main/webapp/app/rest/services/activeConnectionService.js b/guacamole/src/main/webapp/app/rest/services/activeConnectionService.js index 5354bc1c8..3960b39d5 100644 --- a/guacamole/src/main/webapp/app/rest/services/activeConnectionService.js +++ b/guacamole/src/main/webapp/app/rest/services/activeConnectionService.js @@ -29,6 +29,38 @@ angular.module('rest').factory('activeConnectionService', ['$injector', var service = {}; + /** + * Makes a request to the REST API to get a single active connection, + * returning a promise that provides the corresponding + * @link{ActiveConnection} if successful. + * + * @param {String} dataSource + * The identifier of the data source to retrieve the active connection + * from. + * + * @param {String} id + * The identifier of the active connection. + * + * @returns {Promise.} + * A promise which will resolve with a @link{ActiveConnection} upon + * success. + */ + service.getActiveConnection = function getActiveConnection(dataSource, id) { + + // Build HTTP parameters set + var httpParameters = { + token : authenticationService.getCurrentToken() + }; + + // Retrieve active connection + return requestService({ + method : 'GET', + url : 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections/' + encodeURIComponent(id), + params : httpParameters + }); + + }; + /** * Makes a request to the REST API to get the list of active tunnels, * returning a promise that provides a map of @link{ActiveConnection}