You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by jm...@apache.org on 2016/07/17 22:28:45 UTC
[17/19] incubator-guacamole-client git commit: GUACAMOLE-5: Provide
direct access via REST to the sharing profiles available for the active
connection of a given tunnel.
GUACAMOLE-5: Provide direct access via REST to the sharing profiles available for the active connection of a given tunnel.
Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/7ea4af70
Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/7ea4af70
Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/7ea4af70
Branch: refs/heads/master
Commit: 7ea4af7016152ceb9154e9c2aa54bf5d25caab17
Parents: bb36045
Author: Michael Jumper <mj...@apache.org>
Authored: Sat Jul 16 00:37:52 2016 -0700
Committer: Michael Jumper <mj...@apache.org>
Committed: Sat Jul 16 20:44:40 2016 -0700
----------------------------------------------------------------------
.../rest/connection/ConnectionResource.java | 43 ++++++++++
.../webapp/app/rest/services/tunnelService.js | 30 +++++++
.../webapp/app/rest/types/SharingProfile.js | 85 ++++++++++++++++++++
3 files changed, 158 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/7ea4af70/guacamole/src/main/java/org/apache/guacamole/rest/connection/ConnectionResource.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/rest/connection/ConnectionResource.java b/guacamole/src/main/java/org/apache/guacamole/rest/connection/ConnectionResource.java
index 9238af1..4d25770 100644
--- a/guacamole/src/main/java/org/apache/guacamole/rest/connection/ConnectionResource.java
+++ b/guacamole/src/main/java/org/apache/guacamole/rest/connection/ConnectionResource.java
@@ -19,6 +19,7 @@
package org.apache.guacamole.rest.connection;
+import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
import java.util.ArrayList;
@@ -34,6 +35,8 @@ import org.apache.guacamole.GuacamoleSecurityException;
import org.apache.guacamole.net.auth.Connection;
import org.apache.guacamole.net.auth.ConnectionRecord;
import org.apache.guacamole.net.auth.Directory;
+import org.apache.guacamole.rest.directory.DirectoryView;
+import org.apache.guacamole.net.auth.SharingProfile;
import org.apache.guacamole.net.auth.User;
import org.apache.guacamole.net.auth.UserContext;
import org.apache.guacamole.net.auth.permission.ObjectPermission;
@@ -44,6 +47,9 @@ import org.apache.guacamole.rest.history.APIConnectionRecord;
import org.apache.guacamole.protocol.GuacamoleConfiguration;
import org.apache.guacamole.rest.directory.DirectoryObjectResource;
import org.apache.guacamole.rest.directory.DirectoryObjectTranslator;
+import org.apache.guacamole.rest.directory.DirectoryResource;
+import org.apache.guacamole.rest.directory.DirectoryResourceFactory;
+import org.apache.guacamole.rest.sharingprofile.APISharingProfile;
/**
* A REST resource which abstracts the operations available on an existing
@@ -67,6 +73,14 @@ public class ConnectionResource extends DirectoryObjectResource<Connection, APIC
private final Connection connection;
/**
+ * A factory which can be used to create instances of resources representing
+ * SharingProfiles.
+ */
+ @Inject
+ private DirectoryResourceFactory<SharingProfile, APISharingProfile>
+ sharingProfileDirectoryResourceFactory;
+
+ /**
* Creates a new ConnectionResource which exposes the operations and
* subresources available for the given Connection.
*
@@ -152,4 +166,33 @@ public class ConnectionResource extends DirectoryObjectResource<Connection, APIC
}
+ /**
+ * Returns a resource which provides read-only access to the subset of
+ * SharingProfiles that the current user can use to share this connection.
+ *
+ * @return
+ * A resource which provides read-only access to the subset of
+ * SharingProfiles that the current user can use to share this
+ * connection.
+ *
+ * @throws GuacamoleException
+ * If the SharingProfiles associated with this connection cannot be
+ * retrieved.
+ */
+ @Path("sharingProfiles")
+ public DirectoryResource<SharingProfile, APISharingProfile>
+ getSharingProfileDirectoryResource() throws GuacamoleException {
+
+ // Produce subset of all SharingProfiles, containing only those which
+ // are associated with this connection
+ Directory<SharingProfile> sharingProfiles = new DirectoryView<SharingProfile>(
+ userContext.getSharingProfileDirectory(),
+ connection.getSharingProfileIdentifiers()
+ );
+
+ // Return a new resource which provides access to only those SharingProfiles
+ return sharingProfileDirectoryResourceFactory.create(userContext, sharingProfiles);
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/7ea4af70/guacamole/src/main/webapp/app/rest/services/tunnelService.js
----------------------------------------------------------------------
diff --git a/guacamole/src/main/webapp/app/rest/services/tunnelService.js b/guacamole/src/main/webapp/app/rest/services/tunnelService.js
index 1395b25..b9dc0cd 100644
--- a/guacamole/src/main/webapp/app/rest/services/tunnelService.js
+++ b/guacamole/src/main/webapp/app/rest/services/tunnelService.js
@@ -69,6 +69,36 @@ angular.module('rest').factory('tunnelService', ['$injector',
};
/**
+ * Retrieves the set of sharing profiles that the current user can use to
+ * share the active connection of the given tunnel.
+ *
+ * @param {String} tunnel
+ * The UUID of the tunnel associated with the Guacamole connection
+ * whose sharing profiles are being retrieved.
+ *
+ * @returns {Promise.<Object.<String, SharingProfile>>}
+ * A promise which will resolve with a map of @link{SharingProfile}
+ * objects where each key is the identifier of the corresponding
+ * sharing profile.
+ */
+ service.getSharingProfiles = function getSharingProfiles(tunnel) {
+
+ // Build HTTP parameters set
+ var httpParameters = {
+ token : authenticationService.getCurrentToken()
+ };
+
+ // Retrieve all associated sharing profiles
+ return $http({
+ method : 'GET',
+ url : 'api/session/tunnels/' + encodeURIComponent(tunnel)
+ + '/activeConnection/connection/sharingProfiles',
+ params : httpParameters
+ });
+
+ };
+
+ /**
* Makes a request to the REST API to generate credentials which have
* access strictly to the active connection associated with the given
* tunnel, using the restrictions defined by the given sharing profile,
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/7ea4af70/guacamole/src/main/webapp/app/rest/types/SharingProfile.js
----------------------------------------------------------------------
diff --git a/guacamole/src/main/webapp/app/rest/types/SharingProfile.js b/guacamole/src/main/webapp/app/rest/types/SharingProfile.js
new file mode 100644
index 0000000..ea8287d
--- /dev/null
+++ b/guacamole/src/main/webapp/app/rest/types/SharingProfile.js
@@ -0,0 +1,85 @@
+/*
+ * 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 which defines the SharingProfile class.
+ */
+angular.module('rest').factory('SharingProfile', [function defineSharingProfile() {
+
+ /**
+ * The object returned by REST API calls when representing the data
+ * associated with a sharing profile.
+ *
+ * @constructor
+ * @param {SharingProfile|Object} [template={}]
+ * The object whose properties should be copied within the new
+ * SharingProfile.
+ */
+ var SharingProfile = function SharingProfile(template) {
+
+ // Use empty object by default
+ template = template || {};
+
+ /**
+ * The unique identifier associated with this sharing profile.
+ *
+ * @type String
+ */
+ this.identifier = template.identifier;
+
+ /**
+ * The unique identifier of the connection that this sharing profile
+ * can be used to share.
+ *
+ * @type String
+ */
+ this.primaryConnectionIdentifier = template.primaryConnectionIdentifier;
+
+ /**
+ * The human-readable name of this sharing profile, which is not
+ * necessarily unique.
+ *
+ * @type String
+ */
+ this.name = template.name;
+
+ /**
+ * Connection configuration parameters, as dictated by the protocol in
+ * use by the primary connection, arranged as name/value pairs. This
+ * information may not be available until directly queried. If this
+ * information is unavailable, this property will be null or undefined.
+ *
+ * @type Object.<String, String>
+ */
+ this.parameters = template.parameters;
+
+ /**
+ * Arbitrary name/value pairs which further describe this sharing
+ * profile. The semantics and validity of these attributes are dictated
+ * by the extension which defines them.
+ *
+ * @type Object.<String, String>
+ */
+ this.attributes = {};
+
+ };
+
+ return SharingProfile;
+
+}]);
\ No newline at end of file