diff --git a/guacamole/pom.xml b/guacamole/pom.xml
index ea8475e70..3f880bdcb 100644
--- a/guacamole/pom.xml
+++ b/guacamole/pom.xml
@@ -324,19 +324,19 @@
org.webjars.bower
angular
- 1.3.16
+ 1.6.9
runtime
org.webjars.bower
angular-route
- 1.3.16
+ 1.6.9
runtime
org.webjars.bower
angular-touch
- 1.3.16
+ 1.6.9
runtime
@@ -358,13 +358,13 @@
org.webjars.bower
angular-translate
- 2.8.0
+ 2.16.0
runtime
org.webjars.bower
angular-translate-interpolation-messageformat
- 2.8.0
+ 2.16.0
runtime
@@ -382,7 +382,7 @@
org.webjars.bower
angular-translate-loader-static-files
- 2.8.0
+ 2.16.0
runtime
diff --git a/guacamole/src/licenses/LICENSE b/guacamole/src/licenses/LICENSE
index dd70b1ce7..c2e6bf5be 100644
--- a/guacamole/src/licenses/LICENSE
+++ b/guacamole/src/licenses/LICENSE
@@ -214,14 +214,14 @@ terms and conditions of the following licenses.
AngularJS (https://angularjs.org/)
----------------------------------
- Version: 1.3.16
+ Version: 1.6.9
From: 'Google Inc.' (http://www.google.com/)
License(s):
- MIT (bundled/angular-1.3.16/LICENSE)
+ MIT (bundled/angular-1.6.9/LICENSE)
The MIT License
-Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
+Copyright (c) 2010-2018 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -276,14 +276,14 @@ SOFTWARE.
angular-translate (https://angular-translate.github.io/)
--------------------------------------------------------
- Version: 2.8.0
+ Version: 2.16.0
From: 'Pascal Precht' (https://github.com/PascalPrecht)
License(s):
- MIT (bundled/angular-translate-2.8.0/LICENSE)
+ MIT (bundled/angular-translate-2.16.0/LICENSE)
The MIT License (MIT)
-Copyright (c) <2014>
+Copyright (c) 2013-2017 The angular-translate team and Pascal Precht
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/guacamole/src/licenses/bundled/angular-1.3.16/LICENSE b/guacamole/src/licenses/bundled/angular-1.6.9/LICENSE
similarity index 93%
rename from guacamole/src/licenses/bundled/angular-1.3.16/LICENSE
rename to guacamole/src/licenses/bundled/angular-1.6.9/LICENSE
index 22fb3013d..6e46a7034 100644
--- a/guacamole/src/licenses/bundled/angular-1.3.16/LICENSE
+++ b/guacamole/src/licenses/bundled/angular-1.6.9/LICENSE
@@ -1,6 +1,6 @@
The MIT License
-Copyright (c) 2014-2016 Google, Inc. http://angular.io
+Copyright (c) 2010-2018 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+THE SOFTWARE.
\ No newline at end of file
diff --git a/guacamole/src/licenses/bundled/angular-translate-2.8.0/LICENSE b/guacamole/src/licenses/bundled/angular-translate-2.16.0/LICENSE
similarity index 92%
rename from guacamole/src/licenses/bundled/angular-translate-2.8.0/LICENSE
rename to guacamole/src/licenses/bundled/angular-translate-2.16.0/LICENSE
index f3e753f87..85a38881f 100644
--- a/guacamole/src/licenses/bundled/angular-translate-2.8.0/LICENSE
+++ b/guacamole/src/licenses/bundled/angular-translate-2.16.0/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) <2014>
+Copyright (c) 2013-2017 The angular-translate team and Pascal Precht
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+THE SOFTWARE.
\ No newline at end of file
diff --git a/guacamole/src/main/webapp/app/auth/service/authenticationService.js b/guacamole/src/main/webapp/app/auth/service/authenticationService.js
index 2b64a5b81..7f74feaf9 100644
--- a/guacamole/src/main/webapp/app/auth/service/authenticationService.js
+++ b/guacamole/src/main/webapp/app/auth/service/authenticationService.js
@@ -185,7 +185,8 @@ angular.module('auth').factory('authenticationService', ['$injector',
})
// If authentication succeeds, handle received auth data
- .success(function authenticationSuccessful(data) {
+ .then(function authenticationSuccessful(response) {
+ var data = response.data;
var currentToken = service.getCurrentToken();
@@ -217,11 +218,11 @@ angular.module('auth').factory('authenticationService', ['$injector',
})
// If authentication fails, propogate failure to returned promise
- .error(function authenticationFailed(error) {
+ ['catch'](function authenticationFailed(response) {
// Ensure error object exists, even if the error response is not
// coming from the authentication REST endpoint
- error = new Error(error);
+ var error = new Error(response.data);
// Request credentials if provided credentials were invalid
if (error.type === Error.Type.INVALID_CREDENTIALS)
diff --git a/guacamole/src/main/webapp/app/client/controllers/clientController.js b/guacamole/src/main/webapp/app/client/controllers/clientController.js
index a21c0a200..8a2f935ed 100644
--- a/guacamole/src/main/webapp/app/client/controllers/clientController.js
+++ b/guacamole/src/main/webapp/app/client/controllers/clientController.js
@@ -464,7 +464,7 @@ angular.module('client').controller('clientController', ['$scope', '$routeParams
// Pull sharing profiles for the current connection
tunnelService.getSharingProfiles(uuid)
- .success(function sharingProfilesRetrieved(sharingProfiles) {
+ .then(function sharingProfilesRetrieved(sharingProfiles) {
$scope.sharingProfiles = sharingProfiles;
});
diff --git a/guacamole/src/main/webapp/app/client/types/ManagedClient.js b/guacamole/src/main/webapp/app/client/types/ManagedClient.js
index 72481eba6..32acd8d17 100644
--- a/guacamole/src/main/webapp/app/client/types/ManagedClient.js
+++ b/guacamole/src/main/webapp/app/client/types/ManagedClient.js
@@ -512,7 +512,7 @@ angular.module('client').factory('ManagedClient', ['$rootScope', '$injector',
// If using a connection, pull connection name
if (clientIdentifier.type === ClientIdentifier.Types.CONNECTION) {
connectionService.getConnection(clientIdentifier.dataSource, clientIdentifier.id)
- .success(function connectionRetrieved(connection) {
+ .then(function connectionRetrieved(connection) {
managedClient.name = managedClient.title = connection.name;
});
}
@@ -520,7 +520,7 @@ angular.module('client').factory('ManagedClient', ['$rootScope', '$injector',
// If using a connection group, pull connection name
else if (clientIdentifier.type === ClientIdentifier.Types.CONNECTION_GROUP) {
connectionGroupService.getConnectionGroup(clientIdentifier.dataSource, clientIdentifier.id)
- .success(function connectionGroupRetrieved(group) {
+ .then(function connectionGroupRetrieved(group) {
managedClient.name = managedClient.title = group.name;
});
}
@@ -631,7 +631,7 @@ angular.module('client').factory('ManagedClient', ['$rootScope', '$injector',
client.tunnel.uuid, sharingProfile.identifier);
// Add a new share link once the credentials are ready
- credentialRequest.success(function sharingCredentialsReceived(sharingCredentials) {
+ credentialRequest.then(function sharingCredentialsReceived(sharingCredentials) {
client.shareLinks[sharingProfile.identifier] =
ManagedShareLink.getInstance(sharingProfile, sharingCredentials);
});
diff --git a/guacamole/src/main/webapp/app/index/config/indexRouteConfig.js b/guacamole/src/main/webapp/app/index/config/indexRouteConfig.js
index dd2ec6d68..d66226694 100644
--- a/guacamole/src/main/webapp/app/index/config/indexRouteConfig.js
+++ b/guacamole/src/main/webapp/app/index/config/indexRouteConfig.js
@@ -26,6 +26,9 @@ angular.module('index').config(['$routeProvider', '$locationProvider',
// Disable HTML5 mode (use # for routing)
$locationProvider.html5Mode(false);
+ // Clear hash prefix to keep /#/thing/bat URL style
+ $locationProvider.hashPrefix('');
+
/**
* Attempts to re-authenticate with the Guacamole server, sending any
* query parameters in the URL, along with the current auth token, and
diff --git a/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js b/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js
index e28e09f8a..2f832de87 100644
--- a/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js
+++ b/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js
@@ -337,7 +337,7 @@ angular.module('index').config(['$provide', function($provide) {
$delegate.apply(this, arguments).then(function patchTemplate(data) {
// Retrieve and apply all patches
- patchService.getPatches().success(function applyRetrievedPatches(patches) {
+ patchService.getPatches().then(function applyRetrievedPatches(patches) {
// Parse HTML into DOM tree
var root = $('').html(data);
diff --git a/guacamole/src/main/webapp/app/index/filters/arrayFilter.js b/guacamole/src/main/webapp/app/index/filters/arrayFilter.js
new file mode 100644
index 000000000..f0429c859
--- /dev/null
+++ b/guacamole/src/main/webapp/app/index/filters/arrayFilter.js
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A filter for transforming an object into an array of all non-inherited
+ * property values.
+ */
+angular.module('index').filter('toArray', [function toArrayFactory() {
+
+ return function toArrayFiter(input) {
+
+
+ console.log(input)
+
+ // If no object is available, just return an empty array
+ if (!input) {
+ return [];
+ }
+
+ return Object.keys(input).map(function fetchValueByKey(key) {
+ return input[key];
+ });
+ };
+
+}]);
diff --git a/guacamole/src/main/webapp/app/locale/services/translationLoader.js b/guacamole/src/main/webapp/app/locale/services/translationLoader.js
index 6ff492d90..2be5e6a64 100644
--- a/guacamole/src/main/webapp/app/locale/services/translationLoader.js
+++ b/guacamole/src/main/webapp/app/locale/services/translationLoader.js
@@ -74,7 +74,7 @@ angular.module('locale').factory('translationLoader', ['$injector', function tra
languageService.getLanguages()
// Attempt to retrieve translation if language is supported
- .success(function retrievedLanguages(languages) {
+ .then(function retrievedLanguages(languages) {
// Skip retrieval if language is not supported
if (!(currentKey in languages)) {
@@ -90,18 +90,17 @@ angular.module('locale').factory('translationLoader', ['$injector', function tra
})
// Resolve promise if translation retrieved successfully
- .success(function translationFileRetrieved(translation) {
- deferred.resolve(translation);
- })
+ .then(function translationFileRetrieved(request) {
+ deferred.resolve(request.data);
+ },
// Retry with remaining languages if translation file could not be
// retrieved
- .error(tryNextTranslation);
-
- })
+ tryNextTranslation);
+ },
// Retry with remaining languages if translation does not exist
- .error(tryNextTranslation);
+ tryNextTranslation);
};
diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageConnectionController.js b/guacamole/src/main/webapp/app/manage/controllers/manageConnectionController.js
index 2220e4d08..2fd815622 100644
--- a/guacamole/src/main/webapp/app/manage/controllers/manageConnectionController.js
+++ b/guacamole/src/main/webapp/app/manage/controllers/manageConnectionController.js
@@ -184,7 +184,7 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
// Pull connection attribute schema
schemaService.getConnectionAttributes($scope.selectedDataSource)
- .success(function attributesReceived(attributes) {
+ .then(function attributesReceived(attributes) {
$scope.attributes = attributes;
});
@@ -194,13 +194,13 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
ConnectionGroup.ROOT_IDENTIFIER,
[PermissionSet.ObjectPermissionType.ADMINISTER]
)
- .success(function connectionGroupReceived(rootGroup) {
+ .then(function connectionGroupReceived(rootGroup) {
$scope.rootGroup = rootGroup;
});
// Query the user's permissions for the current connection
permissionService.getEffectivePermissions($scope.selectedDataSource, authenticationService.getCurrentUsername())
- .success(function permissionsReceived(permissions) {
+ .then(function permissionsReceived(permissions) {
$scope.permissions = permissions;
@@ -230,7 +230,7 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
// Get protocol metadata
schemaService.getProtocols($scope.selectedDataSource)
- .success(function protocolsReceived(protocols) {
+ .then(function protocolsReceived(protocols) {
$scope.protocols = protocols;
});
@@ -244,13 +244,13 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
// Pull data from existing connection
connectionService.getConnection($scope.selectedDataSource, identifier)
- .success(function connectionRetrieved(connection) {
+ .then(function connectionRetrieved(connection) {
$scope.connection = connection;
});
// Pull connection history
connectionService.getConnectionHistory($scope.selectedDataSource, identifier)
- .success(function historyReceived(historyEntries) {
+ .then(function historyReceived(historyEntries) {
// Wrap all history entries for sake of display
$scope.historyEntryWrappers = [];
@@ -262,7 +262,7 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
// Pull connection parameters
connectionService.getConnectionParameters($scope.selectedDataSource, identifier)
- .success(function parametersReceived(parameters) {
+ .then(function parametersReceived(parameters) {
$scope.parameters = parameters;
});
}
@@ -272,7 +272,7 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
// Pull data from cloned connection
connectionService.getConnection($scope.selectedDataSource, cloneSourceIdentifier)
- .success(function connectionRetrieved(connection) {
+ .then(function connectionRetrieved(connection) {
$scope.connection = connection;
// Clear the identifier field because this connection is new
@@ -284,7 +284,7 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
// Pull connection parameters from cloned connection
connectionService.getConnectionParameters($scope.selectedDataSource, cloneSourceIdentifier)
- .success(function parametersReceived(parameters) {
+ .then(function parametersReceived(parameters) {
$scope.parameters = parameters;
});
}
@@ -388,7 +388,7 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
// Save the connection
connectionService.saveConnection($scope.selectedDataSource, $scope.connection)
- .success(function savedConnection() {
+ .then(function savedConnection() {
$location.url('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections');
})
@@ -438,7 +438,7 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i
// Delete the connection
connectionService.deleteConnection($scope.selectedDataSource, $scope.connection)
- .success(function deletedConnection() {
+ .then(function deletedConnection() {
$location.path('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections');
})
diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageConnectionGroupController.js b/guacamole/src/main/webapp/app/manage/controllers/manageConnectionGroupController.js
index f342f4d1d..6cdda80eb 100644
--- a/guacamole/src/main/webapp/app/manage/controllers/manageConnectionGroupController.js
+++ b/guacamole/src/main/webapp/app/manage/controllers/manageConnectionGroupController.js
@@ -129,13 +129,13 @@ angular.module('manage').controller('manageConnectionGroupController', ['$scope'
// Pull connection group attribute schema
schemaService.getConnectionGroupAttributes($scope.selectedDataSource)
- .success(function attributesReceived(attributes) {
+ .then(function attributesReceived(attributes) {
$scope.attributes = attributes;
});
// Query the user's permissions for the current connection group
permissionService.getEffectivePermissions($scope.selectedDataSource, authenticationService.getCurrentUsername())
- .success(function permissionsReceived(permissions) {
+ .then(function permissionsReceived(permissions) {
$scope.permissions = permissions;
@@ -161,14 +161,14 @@ angular.module('manage').controller('manageConnectionGroupController', ['$scope'
ConnectionGroup.ROOT_IDENTIFIER,
[PermissionSet.ObjectPermissionType.ADMINISTER]
)
- .success(function connectionGroupReceived(rootGroup) {
+ .then(function connectionGroupReceived(rootGroup) {
$scope.rootGroup = rootGroup;
});
// If we are editing an existing connection group, pull its data
if (identifier) {
connectionGroupService.getConnectionGroup($scope.selectedDataSource, identifier)
- .success(function connectionGroupReceived(connectionGroup) {
+ .then(function connectionGroupReceived(connectionGroup) {
$scope.connectionGroup = connectionGroup;
});
}
@@ -230,12 +230,12 @@ angular.module('manage').controller('manageConnectionGroupController', ['$scope'
// Save the connection
connectionGroupService.saveConnectionGroup($scope.selectedDataSource, $scope.connectionGroup)
- .success(function savedConnectionGroup() {
+ .then(function savedConnectionGroup() {
$location.path('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections');
})
// Notify of any errors
- .error(function connectionGroupSaveFailed(error) {
+ ['catch'](function connectionGroupSaveFailed(error) {
guacNotification.showStatus({
'className' : 'error',
'title' : 'MANAGE_CONNECTION_GROUP.DIALOG_HEADER_ERROR',
@@ -280,12 +280,12 @@ angular.module('manage').controller('manageConnectionGroupController', ['$scope'
// Delete the connection group
connectionGroupService.deleteConnectionGroup($scope.selectedDataSource, $scope.connectionGroup)
- .success(function deletedConnectionGroup() {
+ .then(function deletedConnectionGroup() {
$location.path('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections');
})
// Notify of any errors
- .error(function connectionGroupDeletionFailed(error) {
+ ['catch'](function connectionGroupDeletionFailed(error) {
guacNotification.showStatus({
'className' : 'error',
'title' : 'MANAGE_CONNECTION_GROUP.DIALOG_HEADER_ERROR',
diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageSharingProfileController.js b/guacamole/src/main/webapp/app/manage/controllers/manageSharingProfileController.js
index 0583a6918..1adead846 100644
--- a/guacamole/src/main/webapp/app/manage/controllers/manageSharingProfileController.js
+++ b/guacamole/src/main/webapp/app/manage/controllers/manageSharingProfileController.js
@@ -170,13 +170,13 @@ angular.module('manage').controller('manageSharingProfileController', ['$scope',
// Pull sharing profile attribute schema
schemaService.getSharingProfileAttributes($scope.selectedDataSource)
- .success(function attributesReceived(attributes) {
+ .then(function attributesReceived(attributes) {
$scope.attributes = attributes;
});
// Query the user's permissions for the current sharing profile
permissionService.getEffectivePermissions($scope.selectedDataSource, authenticationService.getCurrentUsername())
- .success(function permissionsReceived(permissions) {
+ .then(function permissionsReceived(permissions) {
$scope.permissions = permissions;
@@ -212,7 +212,7 @@ angular.module('manage').controller('manageSharingProfileController', ['$scope',
// Get protocol metadata
schemaService.getProtocols($scope.selectedDataSource)
- .success(function protocolsReceived(protocols) {
+ .then(function protocolsReceived(protocols) {
$scope.protocols = protocols;
});
@@ -221,13 +221,13 @@ angular.module('manage').controller('manageSharingProfileController', ['$scope',
// Pull data from existing sharing profile
sharingProfileService.getSharingProfile($scope.selectedDataSource, identifier)
- .success(function sharingProfileRetrieved(sharingProfile) {
+ .then(function sharingProfileRetrieved(sharingProfile) {
$scope.sharingProfile = sharingProfile;
});
// Pull sharing profile parameters
sharingProfileService.getSharingProfileParameters($scope.selectedDataSource, identifier)
- .success(function parametersReceived(parameters) {
+ .then(function parametersReceived(parameters) {
$scope.parameters = parameters;
});
@@ -238,7 +238,7 @@ angular.module('manage').controller('manageSharingProfileController', ['$scope',
// Pull data from cloned sharing profile
sharingProfileService.getSharingProfile($scope.selectedDataSource, cloneSourceIdentifier)
- .success(function sharingProfileRetrieved(sharingProfile) {
+ .then(function sharingProfileRetrieved(sharingProfile) {
// Store data of sharing profile being cloned
$scope.sharingProfile = sharingProfile;
@@ -250,7 +250,7 @@ angular.module('manage').controller('manageSharingProfileController', ['$scope',
// Pull sharing profile parameters from cloned sharing profile
sharingProfileService.getSharingProfileParameters($scope.selectedDataSource, cloneSourceIdentifier)
- .success(function parametersReceived(parameters) {
+ .then(function parametersReceived(parameters) {
$scope.parameters = parameters;
});
@@ -274,7 +274,7 @@ angular.module('manage').controller('manageSharingProfileController', ['$scope',
// Pull data from existing sharing profile
connectionService.getConnection($scope.selectedDataSource, identifier)
- .success(function connectionRetrieved(connection) {
+ .then(function connectionRetrieved(connection) {
$scope.primaryConnection = connection;
});
@@ -351,12 +351,12 @@ angular.module('manage').controller('manageSharingProfileController', ['$scope',
// Save the sharing profile
sharingProfileService.saveSharingProfile($scope.selectedDataSource, $scope.sharingProfile)
- .success(function savedSharingProfile() {
+ .then(function savedSharingProfile() {
$location.url('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections');
})
// Notify of any errors
- .error(function sharingProfileSaveFailed(error) {
+ ['catch'](function sharingProfileSaveFailed(error) {
guacNotification.showStatus({
'className' : 'error',
'title' : 'MANAGE_SHARING_PROFILE.DIALOG_HEADER_ERROR',
@@ -389,12 +389,12 @@ angular.module('manage').controller('manageSharingProfileController', ['$scope',
// Delete the sharing profile
sharingProfileService.deleteSharingProfile($scope.selectedDataSource, $scope.sharingProfile)
- .success(function deletedSharingProfile() {
+ .then(function deletedSharingProfile() {
$location.path('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections');
})
// Notify of any errors
- .error(function sharingProfileDeletionFailed(error) {
+ ['catch'](function sharingProfileDeletionFailed(error) {
guacNotification.showStatus({
'className' : 'error',
'title' : 'MANAGE_SHARING_PROFILE.DIALOG_HEADER_ERROR',
diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js b/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js
index 48519d5ec..76a837630 100644
--- a/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js
+++ b/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js
@@ -529,7 +529,7 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
});
// Pull user attribute schema
- schemaService.getUserAttributes(selectedDataSource).success(function attributesReceived(attributes) {
+ schemaService.getUserAttributes(selectedDataSource).then(function attributesReceived(attributes) {
$scope.attributes = attributes;
});
@@ -557,12 +557,12 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
$scope.selfUsername = username;
// Pull user permissions
- permissionService.getPermissions(selectedDataSource, username).success(function gotPermissions(permissions) {
+ permissionService.getPermissions(selectedDataSource, username).then(function gotPermissions(permissions) {
$scope.permissionFlags = PermissionFlagSet.fromPermissionSet(permissions);
})
// If permissions cannot be retrieved, use empty permissions
- .error(function permissionRetrievalFailed() {
+ ['catch'](function permissionRetrievalFailed() {
$scope.permissionFlags = new PermissionFlagSet();
});
}
@@ -585,13 +585,13 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
// Pull user permissions
permissionService.getPermissions(selectedDataSource, cloneSourceUsername)
- .success(function gotPermissions(permissions) {
+ .then(function gotPermissions(permissions) {
$scope.permissionFlags = PermissionFlagSet.fromPermissionSet(permissions);
permissionsAdded = permissions;
})
// If permissions cannot be retrieved, use empty permissions
- .error(function permissionRetrievalFailed() {
+ ['catch'](function permissionRetrievalFailed() {
$scope.permissionFlags = new PermissionFlagSet();
});
}
@@ -1117,7 +1117,7 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
else
saveUserPromise = userService.createUser(selectedDataSource, $scope.user);
- saveUserPromise.success(function savedUser() {
+ saveUserPromise.then(function savedUser() {
// Move permission flags if username differs from marker
if ($scope.selfUsername !== $scope.user.username) {
@@ -1138,12 +1138,12 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
// Upon success, save any changed permissions
permissionService.patchPermissions(selectedDataSource, $scope.user.username, permissionsAdded, permissionsRemoved)
- .success(function patchedUserPermissions() {
+ .then(function patchedUserPermissions() {
$location.url('/settings/users');
})
// Notify of any errors
- .error(function userPermissionsPatchFailed(error) {
+ ['catch'](function userPermissionsPatchFailed(error) {
guacNotification.showStatus({
'className' : 'error',
'title' : 'MANAGE_USER.DIALOG_HEADER_ERROR',
@@ -1201,12 +1201,12 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
// Delete the user
userService.deleteUser(selectedDataSource, $scope.user)
- .success(function deletedUser() {
+ .then(function deletedUser() {
$location.path('/settings/users');
})
// Notify of any errors
- .error(function userDeletionFailed(error) {
+ ['catch'](function userDeletionFailed(error) {
guacNotification.showStatus({
'className' : 'error',
'title' : 'MANAGE_USER.DIALOG_HEADER_ERROR',
diff --git a/guacamole/src/main/webapp/app/manage/templates/manageConnection.html b/guacamole/src/main/webapp/app/manage/templates/manageConnection.html
index 737ace3d2..112f715b0 100644
--- a/guacamole/src/main/webapp/app/manage/templates/manageConnection.html
+++ b/guacamole/src/main/webapp/app/manage/templates/manageConnection.html
@@ -32,7 +32,7 @@
{{'MANAGE_CONNECTION.FIELD_HEADER_PROTOCOL' | translate}} |
-
+
|
diff --git a/guacamole/src/main/webapp/app/navigation/directives/guacUserMenu.js b/guacamole/src/main/webapp/app/navigation/directives/guacUserMenu.js
index 9534dd444..13de858e1 100644
--- a/guacamole/src/main/webapp/app/navigation/directives/guacUserMenu.js
+++ b/guacamole/src/main/webapp/app/navigation/directives/guacUserMenu.js
@@ -96,7 +96,7 @@ angular.module('navigation').directive('guacUserMenu', [function guacUserMenu()
// Pull user data
userService.getUser(authenticationService.getDataSource(), $scope.username)
- .success(function userRetrieved(user) {
+ .then(function userRetrieved(user) {
// Store retrieved user object
$scope.user = user;
diff --git a/guacamole/src/main/webapp/app/osk/directives/guacOsk.js b/guacamole/src/main/webapp/app/osk/directives/guacOsk.js
index 4797f120c..968e86e00 100644
--- a/guacamole/src/main/webapp/app/osk/directives/guacOsk.js
+++ b/guacamole/src/main/webapp/app/osk/directives/guacOsk.js
@@ -88,7 +88,9 @@ angular.module('osk').directive('guacOsk', [function guacOsk() {
})
// Build OSK with retrieved layout
- .success(function layoutRetrieved(layout) {
+ .then(function layoutRetrieved(request) {
+
+ var layout = request.data;
// Abort if the layout changed while we were waiting for a response
if ($scope.layout !== url)
diff --git a/guacamole/src/main/webapp/app/rest/services/activeConnectionService.js b/guacamole/src/main/webapp/app/rest/services/activeConnectionService.js
index 7c8fb6a35..b548c86e3 100644
--- a/guacamole/src/main/webapp/app/rest/services/activeConnectionService.js
+++ b/guacamole/src/main/webapp/app/rest/services/activeConnectionService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('activeConnectionService', ['$injector',
function activeConnectionService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var $q = $injector.get('$q');
var authenticationService = $injector.get('authenticationService');
@@ -58,7 +58,7 @@ angular.module('rest').factory('activeConnectionService', ['$injector',
httpParameters.permission = permissionTypes;
// Retrieve tunnels
- return $http({
+ return requestService({
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections',
params : httpParameters
@@ -102,7 +102,7 @@ angular.module('rest').factory('activeConnectionService', ['$injector',
angular.forEach(dataSources, function retrieveActiveConnections(dataSource) {
activeConnectionRequests.push(
service.getActiveConnections(dataSource, permissionTypes)
- .success(function activeConnectionsRetrieved(activeConnections) {
+ .then(function activeConnectionsRetrieved(activeConnections) {
activeConnectionMaps[dataSource] = activeConnections;
})
);
@@ -157,7 +157,7 @@ angular.module('rest').factory('activeConnectionService', ['$injector',
});
// Perform active connection deletion via PATCH
- return $http({
+ return requestService({
method : 'PATCH',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections',
params : httpParameters,
@@ -191,7 +191,7 @@ angular.module('rest').factory('activeConnectionService', ['$injector',
};
// Generate sharing credentials
- return $http({
+ return requestService({
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource)
+ '/activeConnections/' + encodeURIComponent(id)
diff --git a/guacamole/src/main/webapp/app/rest/services/connectionGroupService.js b/guacamole/src/main/webapp/app/rest/services/connectionGroupService.js
index 5e554c1bc..b7e78e3ed 100644
--- a/guacamole/src/main/webapp/app/rest/services/connectionGroupService.js
+++ b/guacamole/src/main/webapp/app/rest/services/connectionGroupService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
function connectionGroupService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var $q = $injector.get('$q');
var authenticationService = $injector.get('authenticationService');
var cacheService = $injector.get('cacheService');
@@ -70,7 +70,7 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
httpParameters.permission = permissionTypes;
// Retrieve connection group
- return $http({
+ return requestService({
cache : cacheService.connections,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroupID) + '/tree',
@@ -103,7 +103,7 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
};
// Retrieve connection group
- return $http({
+ return requestService({
cache : cacheService.connections,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroupID),
@@ -134,7 +134,7 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
// If connection group is new, add it and set the identifier automatically
if (!connectionGroup.identifier) {
- return $http({
+ return requestService({
method : 'POST',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups',
params : httpParameters,
@@ -142,7 +142,7 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
})
// Set the identifier on the new connection group and clear the cache
- .success(function connectionGroupCreated(newConnectionGroup){
+ .then(function connectionGroupCreated(newConnectionGroup){
connectionGroup.identifier = newConnectionGroup.identifier;
cacheService.connections.removeAll();
@@ -154,7 +154,7 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
// Otherwise, update the existing connection group
else {
- return $http({
+ return requestService({
method : 'PUT',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroup.identifier),
params : httpParameters,
@@ -162,7 +162,7 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
})
// Clear the cache
- .success(function connectionGroupUpdated(){
+ .then(function connectionGroupUpdated(){
cacheService.connections.removeAll();
// Clear users cache to force reload of permissions for this
@@ -191,14 +191,14 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
};
// Delete connection group
- return $http({
+ return requestService({
method : 'DELETE',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroup.identifier),
params : httpParameters
})
// Clear the cache
- .success(function connectionGroupDeleted(){
+ .then(function connectionGroupDeleted(){
cacheService.connections.removeAll();
});
diff --git a/guacamole/src/main/webapp/app/rest/services/connectionService.js b/guacamole/src/main/webapp/app/rest/services/connectionService.js
index e3ca62063..8b9360d00 100644
--- a/guacamole/src/main/webapp/app/rest/services/connectionService.js
+++ b/guacamole/src/main/webapp/app/rest/services/connectionService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('connectionService', ['$injector',
function connectionService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var authenticationService = $injector.get('authenticationService');
var cacheService = $injector.get('cacheService');
@@ -41,7 +41,7 @@ angular.module('rest').factory('connectionService', ['$injector',
*
* @example
*
- * connectionService.getConnection('myConnection').success(function(connection) {
+ * connectionService.getConnection('myConnection').then(function(connection) {
* // Do something with the connection
* });
*/
@@ -53,7 +53,7 @@ angular.module('rest').factory('connectionService', ['$injector',
};
// Retrieve connection
- return $http({
+ return requestService({
cache : cacheService.connections,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id),
@@ -82,7 +82,7 @@ angular.module('rest').factory('connectionService', ['$injector',
};
// Retrieve connection history
- return $http({
+ return requestService({
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id) + '/history',
params : httpParameters
@@ -110,7 +110,7 @@ angular.module('rest').factory('connectionService', ['$injector',
};
// Retrieve connection parameters
- return $http({
+ return requestService({
cache : cacheService.connections,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id) + '/parameters',
@@ -141,7 +141,7 @@ angular.module('rest').factory('connectionService', ['$injector',
// If connection is new, add it and set the identifier automatically
if (!connection.identifier) {
- return $http({
+ return requestService({
method : 'POST',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections',
params : httpParameters,
@@ -149,7 +149,7 @@ angular.module('rest').factory('connectionService', ['$injector',
})
// Set the identifier on the new connection and clear the cache
- .success(function connectionCreated(newConnection){
+ .then(function connectionCreated(newConnection){
connection.identifier = newConnection.identifier;
cacheService.connections.removeAll();
@@ -161,7 +161,7 @@ angular.module('rest').factory('connectionService', ['$injector',
// Otherwise, update the existing connection
else {
- return $http({
+ return requestService({
method : 'PUT',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(connection.identifier),
params : httpParameters,
@@ -169,7 +169,7 @@ angular.module('rest').factory('connectionService', ['$injector',
})
// Clear the cache
- .success(function connectionUpdated(){
+ .then(function connectionUpdated(){
cacheService.connections.removeAll();
// Clear users cache to force reload of permissions for this
@@ -198,14 +198,14 @@ angular.module('rest').factory('connectionService', ['$injector',
};
// Delete connection
- return $http({
+ return requestService({
method : 'DELETE',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(connection.identifier),
params : httpParameters
})
// Clear the cache
- .success(function connectionDeleted(){
+ .then(function connectionDeleted(){
cacheService.connections.removeAll();
});
diff --git a/guacamole/src/main/webapp/app/rest/services/dataSourceService.js b/guacamole/src/main/webapp/app/rest/services/dataSourceService.js
index 4dd5a2fd7..783aa10d2 100644
--- a/guacamole/src/main/webapp/app/rest/services/dataSourceService.js
+++ b/guacamole/src/main/webapp/app/rest/services/dataSourceService.js
@@ -23,6 +23,9 @@
angular.module('rest').factory('dataSourceService', ['$injector',
function dataSourceService($injector) {
+ // Required types
+ var Error = $injector.get('Error');
+
// Required services
var $q = $injector.get('$q');
@@ -83,21 +86,20 @@ angular.module('rest').factory('dataSourceService', ['$injector',
fn.apply(this, [dataSource].concat(args))
// Store result on success
- .then(function immediateRequestSucceeded(response) {
- results[dataSource] = response.data;
+ .then(function immediateRequestSucceeded(data) {
+ results[dataSource] = data;
deferredRequest.resolve();
},
// Fail on any errors (except "NOT FOUND")
- function immediateRequestFailed(response) {
+ function immediateRequestFailed(error) {
- // Ignore "NOT FOUND" errors
- if (response.status === 404)
+ if (error.type === Error.Type.NOT_FOUND)
deferredRequest.resolve();
// Explicitly abort for all other errors
else
- deferredRequest.reject(response);
+ deferredRequest.reject(error);
});
diff --git a/guacamole/src/main/webapp/app/rest/services/historyService.js b/guacamole/src/main/webapp/app/rest/services/historyService.js
index c77c4ab80..f4e50272a 100644
--- a/guacamole/src/main/webapp/app/rest/services/historyService.js
+++ b/guacamole/src/main/webapp/app/rest/services/historyService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('historyService', ['$injector',
function historyService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var authenticationService = $injector.get('authenticationService');
var service = {};
@@ -74,7 +74,7 @@ angular.module('rest').factory('historyService', ['$injector',
httpParameters.order = sortPredicates;
// Retrieve connection history
- return $http({
+ return requestService({
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/history/connections',
params : httpParameters
diff --git a/guacamole/src/main/webapp/app/rest/services/languageService.js b/guacamole/src/main/webapp/app/rest/services/languageService.js
index 32696d53c..5b1ecde89 100644
--- a/guacamole/src/main/webapp/app/rest/services/languageService.js
+++ b/guacamole/src/main/webapp/app/rest/services/languageService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('languageService', ['$injector',
function languageService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var authenticationService = $injector.get('authenticationService');
var cacheService = $injector.get('cacheService');
@@ -47,7 +47,7 @@ angular.module('rest').factory('languageService', ['$injector',
};
// Retrieve available languages
- return $http({
+ return requestService({
cache : cacheService.languages,
method : 'GET',
url : 'api/languages',
diff --git a/guacamole/src/main/webapp/app/rest/services/patchService.js b/guacamole/src/main/webapp/app/rest/services/patchService.js
index 65818c29d..de9f6bcab 100644
--- a/guacamole/src/main/webapp/app/rest/services/patchService.js
+++ b/guacamole/src/main/webapp/app/rest/services/patchService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('patchService', ['$injector',
function patchService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var authenticationService = $injector.get('authenticationService');
var cacheService = $injector.get('cacheService');
@@ -48,7 +48,7 @@ angular.module('rest').factory('patchService', ['$injector',
};
// Retrieve all applicable HTML patches
- return $http({
+ return requestService({
cache : cacheService.patches,
method : 'GET',
url : 'api/patches',
diff --git a/guacamole/src/main/webapp/app/rest/services/permissionService.js b/guacamole/src/main/webapp/app/rest/services/permissionService.js
index f108dfae1..ec0a0d536 100644
--- a/guacamole/src/main/webapp/app/rest/services/permissionService.js
+++ b/guacamole/src/main/webapp/app/rest/services/permissionService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('permissionService', ['$injector',
function permissionService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var $q = $injector.get('$q');
var authenticationService = $injector.get('authenticationService');
var cacheService = $injector.get('cacheService');
@@ -103,7 +103,7 @@ angular.module('rest').factory('permissionService', ['$injector',
};
// Retrieve user permissions
- return $http({
+ return requestService({
cache : cacheService.users,
method : 'GET',
url : getEffectivePermissionsResourceURL(dataSource, userID),
@@ -182,7 +182,7 @@ angular.module('rest').factory('permissionService', ['$injector',
};
// Retrieve user permissions
- return $http({
+ return requestService({
cache : cacheService.users,
method : 'GET',
url : getPermissionsResourceURL(dataSource, identifier),
@@ -315,7 +315,7 @@ angular.module('rest').factory('permissionService', ['$injector',
addPatchOperations(permissionPatch, PermissionPatch.Operation.REMOVE, permissionsToRemove);
// Patch user permissions
- return $http({
+ return requestService({
method : 'PATCH',
url : getPermissionsResourceURL(dataSource, identifier),
params : httpParameters,
@@ -323,7 +323,7 @@ angular.module('rest').factory('permissionService', ['$injector',
})
// Clear the cache
- .success(function permissionsPatched(){
+ .then(function permissionsPatched(){
cacheService.users.removeAll();
});
};
diff --git a/guacamole/src/main/webapp/app/rest/services/requestService.js b/guacamole/src/main/webapp/app/rest/services/requestService.js
new file mode 100644
index 000000000..e06b0d7a5
--- /dev/null
+++ b/guacamole/src/main/webapp/app/rest/services/requestService.js
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Service for converting $http promises that pass the entire response into
+ * promises that pass only the data from that response.
+ */
+angular.module('rest').factory('requestService', ['$q', '$http', 'Error',
+ function requestService($q, $http, Error) {
+
+ /**
+ * Given a configuration object formatted for the $http service, returns
+ * a promise that will resolve or reject with only the data from the $http
+ * response.
+ *
+ * @param {Object} object
+ * Configuration object for $http service call.
+ *
+ * @returns {Promise}
+ * A promise that will resolve or reject with the data from the response
+ * to the $http call.
+ */
+ var wrappedHttpCall = function wrappedHttpCall(object) {
+ return $http(object).then(
+ function success(request) { return request.data; },
+ function failure(request) { throw new Error(request.data); }
+ );
+ }
+
+ return wrappedHttpCall;
+}]);
diff --git a/guacamole/src/main/webapp/app/rest/services/schemaService.js b/guacamole/src/main/webapp/app/rest/services/schemaService.js
index 851bffed6..cc871d842 100644
--- a/guacamole/src/main/webapp/app/rest/services/schemaService.js
+++ b/guacamole/src/main/webapp/app/rest/services/schemaService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('schemaService', ['$injector',
function schemaService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var authenticationService = $injector.get('authenticationService');
var cacheService = $injector.get('cacheService');
@@ -55,7 +55,7 @@ angular.module('rest').factory('schemaService', ['$injector',
};
// Retrieve available user attributes
- return $http({
+ return requestService({
cache : cacheService.schema,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/userAttributes',
@@ -89,7 +89,7 @@ angular.module('rest').factory('schemaService', ['$injector',
};
// Retrieve available connection attributes
- return $http({
+ return requestService({
cache : cacheService.schema,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/connectionAttributes',
@@ -123,7 +123,7 @@ angular.module('rest').factory('schemaService', ['$injector',
};
// Retrieve available sharing profile attributes
- return $http({
+ return requestService({
cache : cacheService.schema,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/sharingProfileAttributes',
@@ -157,7 +157,7 @@ angular.module('rest').factory('schemaService', ['$injector',
};
// Retrieve available connection group attributes
- return $http({
+ return requestService({
cache : cacheService.schema,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/connectionGroupAttributes',
@@ -188,7 +188,7 @@ angular.module('rest').factory('schemaService', ['$injector',
};
// Retrieve available protocols
- return $http({
+ return requestService({
cache : cacheService.schema,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/protocols',
diff --git a/guacamole/src/main/webapp/app/rest/services/sharingProfileService.js b/guacamole/src/main/webapp/app/rest/services/sharingProfileService.js
index 4f1f90547..0d8b66d2e 100644
--- a/guacamole/src/main/webapp/app/rest/services/sharingProfileService.js
+++ b/guacamole/src/main/webapp/app/rest/services/sharingProfileService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
function sharingProfileService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var authenticationService = $injector.get('authenticationService');
var cacheService = $injector.get('cacheService');
@@ -43,7 +43,7 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
*
* @example
*
- * sharingProfileService.getSharingProfile('mySharingProfile').success(function(sharingProfile) {
+ * sharingProfileService.getSharingProfile('mySharingProfile').then(function(sharingProfile) {
* // Do something with the sharing profile
* });
*/
@@ -55,7 +55,7 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
};
// Retrieve sharing profile
- return $http({
+ return requestService({
cache : cacheService.connections,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(id),
@@ -84,7 +84,7 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
};
// Retrieve sharing profile parameters
- return $http({
+ return requestService({
cache : cacheService.connections,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(id) + '/parameters',
@@ -116,7 +116,7 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
// If sharing profile is new, add it and set the identifier automatically
if (!sharingProfile.identifier) {
- return $http({
+ return requestService({
method : 'POST',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles',
params : httpParameters,
@@ -124,7 +124,7 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
})
// Set the identifier on the new sharing profile and clear the cache
- .success(function sharingProfileCreated(newSharingProfile){
+ .then(function sharingProfileCreated(newSharingProfile){
sharingProfile.identifier = newSharingProfile.identifier;
cacheService.connections.removeAll();
@@ -136,7 +136,7 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
// Otherwise, update the existing sharing profile
else {
- return $http({
+ return requestService({
method : 'PUT',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(sharingProfile.identifier),
params : httpParameters,
@@ -144,7 +144,7 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
})
// Clear the cache
- .success(function sharingProfileUpdated(){
+ .then(function sharingProfileUpdated(){
cacheService.connections.removeAll();
// Clear users cache to force reload of permissions for this
@@ -174,14 +174,14 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
};
// Delete sharing profile
- return $http({
+ return requestService({
method : 'DELETE',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(sharingProfile.identifier),
params : httpParameters
})
// Clear the cache
- .success(function sharingProfileDeleted(){
+ .then(function sharingProfileDeleted(){
cacheService.connections.removeAll();
});
diff --git a/guacamole/src/main/webapp/app/rest/services/tunnelService.js b/guacamole/src/main/webapp/app/rest/services/tunnelService.js
index f8ee543eb..1dba527a0 100644
--- a/guacamole/src/main/webapp/app/rest/services/tunnelService.js
+++ b/guacamole/src/main/webapp/app/rest/services/tunnelService.js
@@ -28,10 +28,10 @@ angular.module('rest').factory('tunnelService', ['$injector',
var Error = $injector.get('Error');
// Required services
- var $http = $injector.get('$http');
var $q = $injector.get('$q');
var $window = $injector.get('$window');
var authenticationService = $injector.get('authenticationService');
+ var requestService = $injector.get('requestService');
var service = {};
@@ -71,7 +71,7 @@ angular.module('rest').factory('tunnelService', ['$injector',
};
// Retrieve tunnels
- return $http({
+ return requestService({
method : 'GET',
url : 'api/session/tunnels',
params : httpParameters
@@ -100,7 +100,7 @@ angular.module('rest').factory('tunnelService', ['$injector',
};
// Retrieve all associated sharing profiles
- return $http({
+ return requestService({
method : 'GET',
url : 'api/session/tunnels/' + encodeURIComponent(tunnel)
+ '/activeConnection/connection/sharingProfiles',
@@ -136,7 +136,7 @@ angular.module('rest').factory('tunnelService', ['$injector',
};
// Generate sharing credentials
- return $http({
+ return requestService({
method : 'GET',
url : 'api/session/tunnels/' + encodeURIComponent(tunnel)
+ '/activeConnection/sharingCredentials/'
diff --git a/guacamole/src/main/webapp/app/rest/services/userService.js b/guacamole/src/main/webapp/app/rest/services/userService.js
index 659aed7b6..bbf5fcf4b 100644
--- a/guacamole/src/main/webapp/app/rest/services/userService.js
+++ b/guacamole/src/main/webapp/app/rest/services/userService.js
@@ -24,7 +24,7 @@ angular.module('rest').factory('userService', ['$injector',
function userService($injector) {
// Required services
- var $http = $injector.get('$http');
+ var requestService = $injector.get('requestService');
var $q = $injector.get('$q');
var authenticationService = $injector.get('authenticationService');
var cacheService = $injector.get('cacheService');
@@ -67,7 +67,7 @@ angular.module('rest').factory('userService', ['$injector',
httpParameters.permission = permissionTypes;
// Retrieve users
- return $http({
+ return requestService({
cache : cacheService.users,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users',
@@ -100,7 +100,7 @@ angular.module('rest').factory('userService', ['$injector',
};
// Retrieve user
- return $http({
+ return requestService({
cache : cacheService.users,
method : 'GET',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username),
@@ -133,14 +133,14 @@ angular.module('rest').factory('userService', ['$injector',
};
// Delete user
- return $http({
+ return requestService({
method : 'DELETE',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(user.username),
params : httpParameters
})
// Clear the cache
- .success(function userDeleted(){
+ .then(function userDeleted(){
cacheService.users.removeAll();
});
@@ -171,7 +171,7 @@ angular.module('rest').factory('userService', ['$injector',
};
// Create user
- return $http({
+ return requestService({
method : 'POST',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users',
params : httpParameters,
@@ -179,7 +179,7 @@ angular.module('rest').factory('userService', ['$injector',
})
// Clear the cache
- .success(function userCreated(){
+ .then(function userCreated(){
cacheService.users.removeAll();
});
@@ -209,7 +209,7 @@ angular.module('rest').factory('userService', ['$injector',
};
// Update user
- return $http({
+ return requestService({
method : 'PUT',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(user.username),
params : httpParameters,
@@ -217,7 +217,7 @@ angular.module('rest').factory('userService', ['$injector',
})
// Clear the cache
- .success(function userUpdated(){
+ .then(function userUpdated(){
cacheService.users.removeAll();
});
@@ -254,7 +254,7 @@ angular.module('rest').factory('userService', ['$injector',
};
// Update user password
- return $http({
+ return requestService({
method : 'PUT',
url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username) + '/password',
params : httpParameters,
diff --git a/guacamole/src/main/webapp/app/settings/directives/guacSettingsConnectionHistory.js b/guacamole/src/main/webapp/app/settings/directives/guacSettingsConnectionHistory.js
index 09ce84185..36da4ad5f 100644
--- a/guacamole/src/main/webapp/app/settings/directives/guacSettingsConnectionHistory.js
+++ b/guacamole/src/main/webapp/app/settings/directives/guacSettingsConnectionHistory.js
@@ -169,7 +169,7 @@ angular.module('settings').directive('guacSettingsConnectionHistory', [function
return predicate === 'startDate' || predicate === '-startDate';
})
)
- .success(function historyRetrieved(historyEntries) {
+ .then(function historyRetrieved(historyEntries) {
// Wrap all history entries for sake of display
$scope.historyEntryWrappers = [];
diff --git a/guacamole/src/main/webapp/app/settings/directives/guacSettingsConnections.js b/guacamole/src/main/webapp/app/settings/directives/guacSettingsConnections.js
index a245fb2d1..dd9f5c851 100644
--- a/guacamole/src/main/webapp/app/settings/directives/guacSettingsConnections.js
+++ b/guacamole/src/main/webapp/app/settings/directives/guacSettingsConnections.js
@@ -405,7 +405,7 @@ angular.module('settings').directive('guacSettingsConnections', [function guacSe
// Retrieve current permissions
permissionService.getEffectivePermissions($scope.dataSource, currentUsername)
- .success(function permissionsRetrieved(permissions) {
+ .then(function permissionsRetrieved(permissions) {
// Store retrieved permissions
$scope.permissions = permissions;
diff --git a/guacamole/src/main/webapp/app/settings/directives/guacSettingsPreferences.js b/guacamole/src/main/webapp/app/settings/directives/guacSettingsPreferences.js
index 655f23385..12039b191 100644
--- a/guacamole/src/main/webapp/app/settings/directives/guacSettingsPreferences.js
+++ b/guacamole/src/main/webapp/app/settings/directives/guacSettingsPreferences.js
@@ -150,7 +150,7 @@ angular.module('settings').directive('guacSettingsPreferences', [function guacSe
// Save the user with the new password
userService.updateUserPassword(dataSource, username, $scope.oldPassword, $scope.newPassword)
- .success(function passwordUpdated() {
+ .then(function passwordUpdated() {
// Clear the password fields
$scope.oldPassword = null;
@@ -167,7 +167,7 @@ angular.module('settings').directive('guacSettingsPreferences', [function guacSe
})
// Notify of any errors
- .error(function passwordUpdateFailed(error) {
+ ['catch'](function passwordUpdateFailed(error) {
guacNotification.showStatus({
className : 'error',
title : 'SETTINGS_PREFERENCES.DIALOG_HEADER_ERROR',
@@ -180,20 +180,25 @@ angular.module('settings').directive('guacSettingsPreferences', [function guacSe
// Retrieve defined languages
languageService.getLanguages()
- .success(function languagesRetrieved(languages) {
- $scope.languages = languages;
+ .then(function languagesRetrieved(languages) {
+ $scope.languages = Object.keys(languages).map(function(key) {
+ return {
+ key: key,
+ value: languages[key]
+ };
+ })
});
// Retrieve current permissions
permissionService.getEffectivePermissions(dataSource, username)
- .success(function permissionsRetrieved(permissions) {
+ .then(function permissionsRetrieved(permissions) {
// Add action for changing password if permission is granted
$scope.canChangePassword = PermissionSet.hasUserPermission(permissions,
PermissionSet.ObjectPermissionType.UPDATE, username);
})
- .error(function permissionsFailed(error) {
+ ['catch'](function permissionsFailed(error) {
$scope.canChangePassword = false;
});
diff --git a/guacamole/src/main/webapp/app/settings/templates/settingsPreferences.html b/guacamole/src/main/webapp/app/settings/templates/settingsPreferences.html
index 9ce0f9061..826a5cd20 100644
--- a/guacamole/src/main/webapp/app/settings/templates/settingsPreferences.html
+++ b/guacamole/src/main/webapp/app/settings/templates/settingsPreferences.html
@@ -9,7 +9,7 @@
{{'SETTINGS_PREFERENCES.FIELD_HEADER_LANGUAGE' | translate}} |
- |
+ |
diff --git a/guacamole/src/main/webapp/index.html b/guacamole/src/main/webapp/index.html
index 14321de42..fd5dba44e 100644
--- a/guacamole/src/main/webapp/index.html
+++ b/guacamole/src/main/webapp/index.html
@@ -61,15 +61,15 @@
-
-
-
+
+
+
-
-
-
+
+
+