You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by vn...@apache.org on 2018/10/06 12:11:15 UTC
[5/7] guacamole-client git commit: GUACAMOLE-524: Add convenience
classes for injecting custom parameter tokens through decoration.
GUACAMOLE-524: Add convenience classes for injecting custom parameter tokens through decoration.
Project: http://git-wip-us.apache.org/repos/asf/guacamole-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/guacamole-client/commit/0d7cff5f
Tree: http://git-wip-us.apache.org/repos/asf/guacamole-client/tree/0d7cff5f
Diff: http://git-wip-us.apache.org/repos/asf/guacamole-client/diff/0d7cff5f
Branch: refs/heads/master
Commit: 0d7cff5f2d394fa7a7d8a5878895f3b5b9ffea4d
Parents: 7a3f51b
Author: Michael Jumper <mj...@apache.org>
Authored: Thu Oct 4 21:17:22 2018 -0700
Committer: Michael Jumper <mj...@apache.org>
Committed: Fri Oct 5 12:47:26 2018 -0700
----------------------------------------------------------------------
.../net/auth/TokenInjectingConnection.java | 69 +++++++++
.../net/auth/TokenInjectingConnectionGroup.java | 69 +++++++++
.../net/auth/TokenInjectingUserContext.java | 144 +++++++++++++++++++
3 files changed, 282 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/0d7cff5f/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingConnection.java
----------------------------------------------------------------------
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingConnection.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingConnection.java
new file mode 100644
index 0000000..8a826d8
--- /dev/null
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingConnection.java
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+package org.apache.guacamole.net.auth;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.guacamole.GuacamoleException;
+import org.apache.guacamole.net.GuacamoleTunnel;
+import org.apache.guacamole.protocol.GuacamoleClientInformation;
+
+/**
+ * Connection implementation which overrides the connect() function of an
+ * underlying Connection, adding a given set of parameter tokens to the tokens
+ * already supplied.
+ */
+public class TokenInjectingConnection extends DelegatingConnection {
+
+ /**
+ * The additional tokens to include with each call to connect().
+ */
+ private final Map<String, String> tokens;
+
+ /**
+ * Wraps the given Connection, automatically adding the given tokens to
+ * each invocation of connect(). Any additional tokens which have the same
+ * name as existing tokens will override the existing values.
+ *
+ * @param connection
+ * The Connection to wrap.
+ *
+ * @param tokens
+ * The additional tokens to include with each call to connect().
+ */
+ public TokenInjectingConnection(Connection connection,
+ Map<String, String> tokens) {
+ super(connection);
+ this.tokens = tokens;
+ }
+
+ @Override
+ public GuacamoleTunnel connect(GuacamoleClientInformation info,
+ Map<String, String> tokens) throws GuacamoleException {
+
+ // Apply provided tokens over those given to connect()
+ tokens = new HashMap<>(tokens);
+ tokens.putAll(this.tokens);
+
+ return super.connect(info, tokens);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/0d7cff5f/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingConnectionGroup.java
----------------------------------------------------------------------
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingConnectionGroup.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingConnectionGroup.java
new file mode 100644
index 0000000..0ec93ba
--- /dev/null
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingConnectionGroup.java
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+package org.apache.guacamole.net.auth;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.guacamole.GuacamoleException;
+import org.apache.guacamole.net.GuacamoleTunnel;
+import org.apache.guacamole.protocol.GuacamoleClientInformation;
+
+/**
+ * ConnectionGroup implementation which overrides the connect() function of an
+ * underlying ConnectionGroup, adding a given set of parameter tokens to the
+ * tokens already supplied.
+ */
+public class TokenInjectingConnectionGroup extends DelegatingConnectionGroup {
+
+ /**
+ * The additional tokens to include with each call to connect().
+ */
+ private final Map<String, String> tokens;
+
+ /**
+ * Wraps the given ConnectionGroup, automatically adding the given tokens
+ * to each invocation of connect(). Any additional tokens which have the
+ * same name as existing tokens will override the existing values.
+ *
+ * @param connectionGroup
+ * The ConnectionGroup to wrap.
+ *
+ * @param tokens
+ * The additional tokens to include with each call to connect().
+ */
+ public TokenInjectingConnectionGroup(ConnectionGroup connectionGroup,
+ Map<String, String> tokens) {
+ super(connectionGroup);
+ this.tokens = tokens;
+ }
+
+ @Override
+ public GuacamoleTunnel connect(GuacamoleClientInformation info,
+ Map<String, String> tokens) throws GuacamoleException {
+
+ // Apply provided tokens over those given to connect()
+ tokens = new HashMap<>(tokens);
+ tokens.putAll(this.tokens);
+
+ return super.connect(info, tokens);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/0d7cff5f/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingUserContext.java
----------------------------------------------------------------------
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingUserContext.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingUserContext.java
new file mode 100644
index 0000000..a1ede96
--- /dev/null
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/TokenInjectingUserContext.java
@@ -0,0 +1,144 @@
+/*
+ * 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.
+ */
+
+package org.apache.guacamole.net.auth;
+
+import java.util.Collections;
+import java.util.Map;
+import org.apache.guacamole.GuacamoleException;
+
+/**
+ * UserContext implementation which decorates a given UserContext,
+ * automatically applying additional parameter tokens during the connection
+ * process of any retrieved Connections and ConnectionGroups.
+ */
+public class TokenInjectingUserContext extends DelegatingUserContext {
+
+ /**
+ * The additional tokens to include with each call to connect() if
+ * getTokens() is not overridden.
+ */
+ private final Map<String, String> tokens;
+
+ /**
+ * Wraps the given UserContext, overriding the connect() function of each
+ * retrieved Connection and ConnectionGroup such that the given additional
+ * parameter tokens are included. Any additional tokens which have the same
+ * name as existing tokens will override the existing values. If tokens
+ * specific to a particular connection or connection group need to be
+ * included, getTokens() may be overridden to provide a different set of
+ * tokens.
+ *
+ * @param userContext
+ * The UserContext to wrap.
+ *
+ * @param tokens
+ * The additional tokens to include with each call to connect().
+ */
+ public TokenInjectingUserContext(UserContext userContext,
+ Map<String, String> tokens) {
+ super(userContext);
+ this.tokens = tokens;
+ }
+
+ /**
+ * Wraps the given UserContext, overriding the connect() function of each
+ * retrieved Connection and ConnectionGroup such that the additional
+ * parameter tokens returned by getTokens() are included. Any additional
+ * tokens which have the same name as existing tokens will override the
+ * existing values.
+ *
+ * @param userContext
+ * The UserContext to wrap.
+ */
+ public TokenInjectingUserContext(UserContext userContext) {
+ this(userContext, Collections.<String, String>emptyMap());
+ }
+
+ /**
+ * Returns the tokens which should be added to an in-progress call to
+ * connect() for the given Connection. If not overridden, this function
+ * will return the tokens provided when this instance of
+ * TokenInjectingUserContext was created.
+ *
+ * @param connection
+ * The Connection on which connect() has been called.
+ *
+ * @return
+ * The tokens which should be added to the in-progress call to
+ * connect().
+ */
+ protected Map<String, String> getTokens(Connection connection) {
+ return tokens;
+ }
+
+ /**
+ * Returns the tokens which should be added to an in-progress call to
+ * connect() for the given ConnectionGroup. If not overridden, this
+ * function will return the tokens provided when this instance of
+ * TokenInjectingUserContext was created.
+ *
+ * @param connectionGroup
+ * The ConnectionGroup on which connect() has been called.
+ *
+ * @return
+ * The tokens which should be added to the in-progress call to
+ * connect().
+ */
+ protected Map<String, String> getTokens(ConnectionGroup connectionGroup) {
+ return tokens;
+ }
+
+ @Override
+ public Directory<ConnectionGroup> getConnectionGroupDirectory()
+ throws GuacamoleException {
+ return new DecoratingDirectory<ConnectionGroup>(super.getConnectionGroupDirectory()) {
+
+ @Override
+ protected ConnectionGroup decorate(ConnectionGroup object) throws GuacamoleException {
+ return new TokenInjectingConnectionGroup(object, getTokens(object));
+ }
+
+ @Override
+ protected ConnectionGroup undecorate(ConnectionGroup object) throws GuacamoleException {
+ return ((TokenInjectingConnectionGroup) object).getDelegateConnectionGroup();
+ }
+
+ };
+ }
+
+ @Override
+ public Directory<Connection> getConnectionDirectory()
+ throws GuacamoleException {
+ return new DecoratingDirectory<Connection>(super.getConnectionDirectory()) {
+
+ @Override
+ protected Connection decorate(Connection object) throws GuacamoleException {
+ return new TokenInjectingConnection(object, getTokens(object));
+ }
+
+ @Override
+ protected Connection undecorate(Connection object) throws GuacamoleException {
+ return ((TokenInjectingConnection) object).getDelegateConnection();
+ }
+
+ };
+ }
+
+}