mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 05:07:41 +00:00
GUAC-1132: Implement getActiveConnection() on UserContext.
This commit is contained in:
@@ -29,7 +29,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import org.glyptodon.guacamole.auth.jdbc.user.AuthenticatedUser;
|
||||
@@ -47,7 +47,6 @@ import org.glyptodon.guacamole.auth.jdbc.connection.ConnectionMapper;
|
||||
import org.glyptodon.guacamole.environment.Environment;
|
||||
import org.glyptodon.guacamole.net.GuacamoleSocket;
|
||||
import org.glyptodon.guacamole.net.GuacamoleTunnel;
|
||||
import org.glyptodon.guacamole.net.SynchronizedGuacamoleTunnel;
|
||||
import org.glyptodon.guacamole.net.auth.Connection;
|
||||
import org.glyptodon.guacamole.net.auth.ConnectionGroup;
|
||||
import org.glyptodon.guacamole.net.auth.ConnectionRecord;
|
||||
@@ -99,10 +98,10 @@ public abstract class AbstractGuacamoleTunnelService implements GuacamoleTunnelS
|
||||
private ConnectionRecordMapper connectionRecordMapper;
|
||||
|
||||
/**
|
||||
* All records associated with active connections.
|
||||
* All active connections through the tunnel having a given UUID.
|
||||
*/
|
||||
private final Set<ConnectionRecord> activeConnectionRecords =
|
||||
Collections.newSetFromMap(new ConcurrentHashMap<ConnectionRecord, Boolean>());
|
||||
private final Map<String, ConnectionRecord> activeTunnels =
|
||||
new ConcurrentHashMap<String, ConnectionRecord>();
|
||||
|
||||
/**
|
||||
* All active connections to a connection having a given identifier.
|
||||
@@ -329,9 +328,9 @@ public abstract class AbstractGuacamoleTunnelService implements GuacamoleTunnelS
|
||||
String parentIdentifier = connection.getParentIdentifier();
|
||||
|
||||
// Release connection
|
||||
activeTunnels.remove(activeConnection.getUUID().toString());
|
||||
activeConnections.remove(identifier, activeConnection);
|
||||
activeConnectionGroups.remove(parentIdentifier, activeConnection);
|
||||
activeConnectionRecords.remove(activeConnection);
|
||||
release(user, connection);
|
||||
|
||||
// Release any associated group
|
||||
@@ -377,7 +376,7 @@ public abstract class AbstractGuacamoleTunnelService implements GuacamoleTunnelS
|
||||
|
||||
// Record new active connection
|
||||
Runnable cleanupTask = new ConnectionCleanupTask(activeConnection);
|
||||
activeConnectionRecords.add(activeConnection);
|
||||
activeTunnels.put(activeConnection.getUUID().toString(), activeConnection);
|
||||
activeConnections.put(connection.getIdentifier(), activeConnection);
|
||||
activeConnectionGroups.put(connection.getParentIdentifier(), activeConnection);
|
||||
|
||||
@@ -391,9 +390,7 @@ public abstract class AbstractGuacamoleTunnelService implements GuacamoleTunnelS
|
||||
);
|
||||
|
||||
// Assign and return new tunnel
|
||||
GuacamoleTunnel tunnel = new SynchronizedGuacamoleTunnel(socket);
|
||||
activeConnection.setTunnel(tunnel);
|
||||
return tunnel;
|
||||
return activeConnection.assignGuacamoleTunnel(socket);
|
||||
|
||||
}
|
||||
|
||||
@@ -456,7 +453,19 @@ public abstract class AbstractGuacamoleTunnelService implements GuacamoleTunnelS
|
||||
if (!user.getUser().isAdministrator())
|
||||
return Collections.EMPTY_LIST;
|
||||
|
||||
return Collections.unmodifiableCollection(activeConnectionRecords);
|
||||
return Collections.unmodifiableCollection(activeTunnels.values());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConnectionRecord getActiveConnection(AuthenticatedUser user,
|
||||
String tunnelUUID) throws GuacamoleException {
|
||||
|
||||
// Only administrators may see all active connections
|
||||
if (!user.getUser().isAdministrator())
|
||||
return null;
|
||||
|
||||
return activeTunnels.get(tunnelUUID);
|
||||
|
||||
}
|
||||
|
||||
|
@@ -23,9 +23,12 @@
|
||||
package org.glyptodon.guacamole.auth.jdbc.tunnel;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
import org.glyptodon.guacamole.auth.jdbc.connection.ModeledConnection;
|
||||
import org.glyptodon.guacamole.auth.jdbc.connectiongroup.ModeledConnectionGroup;
|
||||
import org.glyptodon.guacamole.auth.jdbc.user.AuthenticatedUser;
|
||||
import org.glyptodon.guacamole.net.AbstractGuacamoleTunnel;
|
||||
import org.glyptodon.guacamole.net.GuacamoleSocket;
|
||||
import org.glyptodon.guacamole.net.GuacamoleTunnel;
|
||||
import org.glyptodon.guacamole.net.auth.ConnectionRecord;
|
||||
|
||||
@@ -62,6 +65,11 @@ public class ActiveConnectionRecord implements ConnectionRecord {
|
||||
*/
|
||||
private final Date startDate = new Date();
|
||||
|
||||
/**
|
||||
* The UUID that will be assigned to the underlying tunnel.
|
||||
*/
|
||||
private final UUID uuid = UUID.randomUUID();
|
||||
|
||||
/**
|
||||
* The GuacamoleTunnel used by the connection associated with this
|
||||
* connection record.
|
||||
@@ -198,13 +206,48 @@ public class ActiveConnectionRecord implements ConnectionRecord {
|
||||
}
|
||||
|
||||
/**
|
||||
* Associates the given GuacamoleTunnel with this connection record.
|
||||
* Associates a new GuacamoleTunnel with this connection record using the
|
||||
* given socket.
|
||||
*
|
||||
* @param tunnel
|
||||
* The GuacamoleTunnel to associate with this connection record.
|
||||
* @param socket
|
||||
* The GuacamoleSocket to use to create the tunnel associated with this
|
||||
* connection record.
|
||||
*
|
||||
* @return
|
||||
* The newly-created tunnel associated with this connection record.
|
||||
*/
|
||||
public void setTunnel(GuacamoleTunnel tunnel) {
|
||||
this.tunnel = tunnel;
|
||||
public GuacamoleTunnel assignGuacamoleTunnel(final GuacamoleSocket socket) {
|
||||
|
||||
// Create tunnel with given socket
|
||||
this.tunnel = new AbstractGuacamoleTunnel() {
|
||||
|
||||
@Override
|
||||
public GuacamoleSocket getSocket() {
|
||||
return socket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getUUID() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Return newly-created tunnel
|
||||
return this.tunnel;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the UUID of the underlying tunnel. If there is no underlying
|
||||
* tunnel, this will be the UUID assigned to the underlying tunnel when the
|
||||
* tunnel is set.
|
||||
*
|
||||
* @return
|
||||
* The current or future UUID of the underlying tunnel.
|
||||
*/
|
||||
public UUID getUUID() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -43,7 +43,7 @@ import org.glyptodon.guacamole.protocol.GuacamoleClientInformation;
|
||||
public interface GuacamoleTunnelService {
|
||||
|
||||
/**
|
||||
* Returns a connection containing connection records representing all
|
||||
* Returns a collection containing connection records representing all
|
||||
* currently-active connections visible by the given user.
|
||||
*
|
||||
* @param user
|
||||
@@ -60,6 +60,30 @@ public interface GuacamoleTunnelService {
|
||||
public Collection<ConnectionRecord> getActiveConnections(AuthenticatedUser user)
|
||||
throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Returns the connection records representing the connection associated
|
||||
* with the tunnel having the given UUID, if that connection is visible to
|
||||
* the given user.
|
||||
*
|
||||
* @param user
|
||||
* The user retrieving the active connection.
|
||||
*
|
||||
* @param tunnelUUID
|
||||
* The UUID of the tunnel associated with the active connection being
|
||||
* retrieved.
|
||||
*
|
||||
* @return
|
||||
* The active connection associated with the tunnel having the given
|
||||
* UUID, or null if no such connection exists.
|
||||
*
|
||||
* @throws GuacamoleException
|
||||
* If an error occurs while retrieving all active connections, or if
|
||||
* permission is denied.
|
||||
*/
|
||||
public ConnectionRecord getActiveConnection(AuthenticatedUser user,
|
||||
String tunnelUUID)
|
||||
throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Creates a socket for the given user which connects to the given
|
||||
* connection. The given client information will be passed to guacd when
|
||||
|
@@ -29,7 +29,6 @@ import org.glyptodon.guacamole.auth.jdbc.connection.ConnectionDirectory;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.auth.jdbc.base.RestrictedObject;
|
||||
import org.glyptodon.guacamole.auth.jdbc.tunnel.GuacamoleTunnelService;
|
||||
@@ -133,8 +132,7 @@ public class UserContext extends RestrictedObject
|
||||
@Override
|
||||
public ConnectionRecord getActiveConnection(String tunnelUUID)
|
||||
throws GuacamoleException {
|
||||
// STUB
|
||||
return null;
|
||||
return tunnelService.getActiveConnection(getCurrentUser(), tunnelUUID);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user