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