mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
Ticket #263: Improved guacamole-ext and added ConnectionGroup mapper.
This commit is contained in:
@@ -47,6 +47,7 @@ import net.sourceforge.guacamole.GuacamoleException;
|
||||
import net.sourceforge.guacamole.net.auth.AuthenticationProvider;
|
||||
import net.sourceforge.guacamole.net.auth.Credentials;
|
||||
import net.sourceforge.guacamole.net.auth.UserContext;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionGroupMapper;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionHistoryMapper;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionMapper;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionParameterMapper;
|
||||
@@ -156,6 +157,7 @@ public class MySQLAuthenticationProvider implements AuthenticationProvider {
|
||||
// Add MyBatis mappers
|
||||
addMapperClass(ConnectionHistoryMapper.class);
|
||||
addMapperClass(ConnectionMapper.class);
|
||||
addMapperClass(ConnectionGroupMapper.class);
|
||||
addMapperClass(ConnectionParameterMapper.class);
|
||||
addMapperClass(ConnectionPermissionMapper.class);
|
||||
addMapperClass(SystemPermissionMapper.class);
|
||||
|
@@ -0,0 +1,140 @@
|
||||
|
||||
package net.sourceforge.guacamole.net.auth.mysql;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth-mysql.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* James Muehlner.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import net.sourceforge.guacamole.GuacamoleException;
|
||||
import net.sourceforge.guacamole.net.GuacamoleSocket;
|
||||
import net.sourceforge.guacamole.net.auth.AbstractConnectionGroup;
|
||||
import net.sourceforge.guacamole.net.auth.Connection;
|
||||
import net.sourceforge.guacamole.net.auth.ConnectionGroup;
|
||||
import net.sourceforge.guacamole.net.auth.Directory;
|
||||
import net.sourceforge.guacamole.protocol.GuacamoleClientInformation;
|
||||
|
||||
/**
|
||||
* A MySQL based implementation of the ConnectionGroup object.
|
||||
* @author James Muehlner
|
||||
*/
|
||||
public class MySQLConnectionGroup extends AbstractConnectionGroup {
|
||||
|
||||
/**
|
||||
* The ID associated with this connection group in the database.
|
||||
*/
|
||||
private Integer connectionGroupID;
|
||||
|
||||
/**
|
||||
* The ID of the user who queried or created this connection group.
|
||||
*/
|
||||
private int userID;
|
||||
|
||||
/**
|
||||
* A Directory of connections that have this connection group as a parent.
|
||||
*/
|
||||
private Directory<String, Connection> connectionDirectory;
|
||||
|
||||
/**
|
||||
* A Directory of connection groups that have this connection group as a parent.
|
||||
*/
|
||||
private Directory<String, ConnectionGroup> connectionGroupDirectory;
|
||||
|
||||
/**
|
||||
* Service for managing connection groups.
|
||||
*/
|
||||
//@Inject
|
||||
//private ConnectionGroupService connectionGroupService;
|
||||
|
||||
/**
|
||||
* Create a default, empty connection group.
|
||||
*/
|
||||
public MySQLConnectionGroup() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ID of the corresponding connection group record.
|
||||
* @return The ID of the corresponding connection group, if any.
|
||||
*/
|
||||
public Integer getConnectionGroupID() {
|
||||
return connectionGroupID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the ID of the corresponding connection group record.
|
||||
* @param connectionID The ID to assign to this connection group.
|
||||
*/
|
||||
public void setConnectionID(Integer connectionGroupID) {
|
||||
this.connectionGroupID = connectionGroupID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize from explicit values.
|
||||
*
|
||||
* @param connectionGroupID The ID of the associated database record, if any.
|
||||
* @param identifier The unique identifier associated with this connection group.
|
||||
* @param config The GuacamoleConfiguration associated with this connection.
|
||||
* @param history All ConnectionRecords associated with this connection.
|
||||
* @param userID The IID of the user who queried this connection.
|
||||
*/
|
||||
public void init(Integer connectionGroupID, String identifier,
|
||||
Directory<String, Connection> connectionDirectory,
|
||||
Directory<String, ConnectionGroup> connectionGroupDirectory,
|
||||
int userID) {
|
||||
|
||||
this.connectionGroupID = connectionGroupID;
|
||||
setIdentifier(identifier);
|
||||
this.connectionDirectory = connectionDirectory;
|
||||
this.connectionGroupDirectory = connectionGroupDirectory;
|
||||
this.userID = userID;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuacamoleSocket connect(GuacamoleClientInformation info) throws GuacamoleException {
|
||||
return connectionGroupService.connect(this, info, userID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Directory<String, Connection> getConnectionDirectory() throws GuacamoleException {
|
||||
return connectionDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Directory<String, ConnectionGroup> getConnectionGroupDirectory() throws GuacamoleException {
|
||||
return connectionGroupDirectory;
|
||||
}
|
||||
|
||||
}
|
@@ -40,6 +40,7 @@ package net.sourceforge.guacamole.net.auth.mysql;
|
||||
import com.google.inject.Inject;
|
||||
import net.sourceforge.guacamole.GuacamoleException;
|
||||
import net.sourceforge.guacamole.net.auth.Connection;
|
||||
import net.sourceforge.guacamole.net.auth.ConnectionGroup;
|
||||
import net.sourceforge.guacamole.net.auth.Directory;
|
||||
import net.sourceforge.guacamole.net.auth.User;
|
||||
import net.sourceforge.guacamole.net.auth.UserContext;
|
||||
@@ -64,13 +65,6 @@ public class MySQLUserContext implements UserContext {
|
||||
@Inject
|
||||
private UserDirectory userDirectory;
|
||||
|
||||
/**
|
||||
* Connection directory restricted by the permissions of the user associated
|
||||
* with this context.
|
||||
*/
|
||||
@Inject
|
||||
private ConnectionDirectory connectionDirectory;
|
||||
|
||||
/**
|
||||
* Service for accessing users.
|
||||
*/
|
||||
@@ -85,7 +79,6 @@ public class MySQLUserContext implements UserContext {
|
||||
public void init(int user_id) {
|
||||
this.user_id = user_id;
|
||||
userDirectory.init(user_id);
|
||||
connectionDirectory.init(user_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,8 +92,8 @@ public class MySQLUserContext implements UserContext {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Directory<String, Connection> getConnectionDirectory() throws GuacamoleException {
|
||||
return connectionDirectory;
|
||||
public ConnectionGroup getConnectionGroup() throws GuacamoleException {
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,456 @@
|
||||
|
||||
package net.sourceforge.guacamole.net.auth.mysql.service;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth-mysql.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* James Muehlner.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import net.sourceforge.guacamole.GuacamoleClientException;
|
||||
import net.sourceforge.guacamole.GuacamoleException;
|
||||
import net.sourceforge.guacamole.net.GuacamoleSocket;
|
||||
import net.sourceforge.guacamole.net.InetGuacamoleSocket;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.ActiveConnectionSet;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.MySQLConnection;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.MySQLConnectionRecord;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.MySQLGuacamoleSocket;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionHistoryMapper;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionMapper;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionParameterMapper;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.model.Connection;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionExample;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionHistory;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionHistoryExample;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionParameter;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionParameterExample;
|
||||
import net.sourceforge.guacamole.net.auth.mysql.properties.MySQLGuacamoleProperties;
|
||||
import net.sourceforge.guacamole.properties.GuacamoleProperties;
|
||||
import net.sourceforge.guacamole.protocol.ConfiguredGuacamoleSocket;
|
||||
import net.sourceforge.guacamole.protocol.GuacamoleClientInformation;
|
||||
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
||||
import org.apache.ibatis.session.RowBounds;
|
||||
|
||||
/**
|
||||
* Service which provides convenience methods for creating, retrieving, and
|
||||
* manipulating connections.
|
||||
*
|
||||
* @author Michael Jumper, James Muehlner
|
||||
*/
|
||||
public class ConnectionGroupService {
|
||||
|
||||
/**
|
||||
* DAO for accessing connections.
|
||||
*/
|
||||
@Inject
|
||||
private ConnectionMapper connectionDAO;
|
||||
|
||||
/**
|
||||
* DAO for accessing connection parameters.
|
||||
*/
|
||||
@Inject
|
||||
private ConnectionParameterMapper connectionParameterDAO;
|
||||
|
||||
/**
|
||||
* DAO for accessing connection history.
|
||||
*/
|
||||
@Inject
|
||||
private ConnectionHistoryMapper connectionHistoryDAO;
|
||||
|
||||
/**
|
||||
* Provider which creates MySQLConnections.
|
||||
*/
|
||||
@Inject
|
||||
private Provider<MySQLConnection> mySQLConnectionProvider;
|
||||
|
||||
/**
|
||||
* Provider which creates MySQLGuacamoleSockets.
|
||||
*/
|
||||
@Inject
|
||||
private Provider<MySQLGuacamoleSocket> mySQLGuacamoleSocketProvider;
|
||||
|
||||
/**
|
||||
* Set of all currently active connections.
|
||||
*/
|
||||
@Inject
|
||||
private ActiveConnectionSet activeConnectionSet;
|
||||
|
||||
/**
|
||||
* Service managing users.
|
||||
*/
|
||||
@Inject
|
||||
private UserService userService;
|
||||
|
||||
/**
|
||||
* Retrieves the connection having the given name from the database.
|
||||
*
|
||||
* @param name The name of the connection to return.
|
||||
* @param userID The ID of the user who queried this connection.
|
||||
* @return The connection having the given name, or null if no such
|
||||
* connection could be found.
|
||||
*/
|
||||
public MySQLConnection retrieveConnection(String name, int userID) {
|
||||
|
||||
// Query connection by connection identifier (name)
|
||||
ConnectionExample example = new ConnectionExample();
|
||||
example.createCriteria().andConnection_nameEqualTo(name);
|
||||
List<Connection> connections =
|
||||
connectionDAO.selectByExample(example);
|
||||
|
||||
// If no connection found, return null
|
||||
if(connections.isEmpty())
|
||||
return null;
|
||||
|
||||
// Assert only one connection found
|
||||
assert connections.size() == 1 : "Multiple connections with same name.";
|
||||
|
||||
// Otherwise, return found connection
|
||||
return toMySQLConnection(connections.get(0), userID);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the connection having the given ID from the database.
|
||||
*
|
||||
* @param id The ID of the connection to retrieve.
|
||||
* @param userID The ID of the user who queried this connection.
|
||||
* @return The connection having the given ID, or null if no such
|
||||
* connection was found.
|
||||
*/
|
||||
public MySQLConnection retrieveConnection(int id, int userID) {
|
||||
|
||||
// Query connection by ID
|
||||
Connection connection = connectionDAO.selectByPrimaryKey(id);
|
||||
|
||||
// If no connection found, return null
|
||||
if(connection == null)
|
||||
return null;
|
||||
|
||||
// Otherwise, return found connection
|
||||
return toMySQLConnection(connection, userID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a translation map of connection names to their corresponding
|
||||
* IDs.
|
||||
*
|
||||
* @param ids The IDs of the connections to retrieve the names of.
|
||||
* @return A map containing the names of all connections and their
|
||||
* corresponding IDs.
|
||||
*/
|
||||
public Map<String, Integer> translateNames(List<Integer> ids) {
|
||||
|
||||
// If no IDs given, just return empty map
|
||||
if (ids.isEmpty())
|
||||
return Collections.EMPTY_MAP;
|
||||
|
||||
// Map of all names onto their corresponding IDs.
|
||||
Map<String, Integer> names = new HashMap<String, Integer>();
|
||||
|
||||
// Get all connections having the given IDs
|
||||
ConnectionExample example = new ConnectionExample();
|
||||
example.createCriteria().andConnection_idIn(ids);
|
||||
List<Connection> connections = connectionDAO.selectByExample(example);
|
||||
|
||||
// Produce set of names
|
||||
for (Connection connection : connections)
|
||||
names.put(connection.getConnection_name(),
|
||||
connection.getConnection_id());
|
||||
|
||||
return names;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a map of all connection names for the given IDs.
|
||||
*
|
||||
* @param ids The IDs of the connections to retrieve the names of.
|
||||
* @return A map containing the names of all connections and their
|
||||
* corresponding IDs.
|
||||
*/
|
||||
public Map<Integer, String> retrieveNames(Collection<Integer> ids) {
|
||||
|
||||
// If no IDs given, just return empty map
|
||||
if (ids.isEmpty())
|
||||
return Collections.EMPTY_MAP;
|
||||
|
||||
// Map of all names onto their corresponding IDs.
|
||||
Map<Integer, String> names = new HashMap<Integer, String>();
|
||||
|
||||
// Get all connections having the given IDs
|
||||
ConnectionExample example = new ConnectionExample();
|
||||
example.createCriteria().andConnection_idIn(Lists.newArrayList(ids));
|
||||
List<Connection> connections = connectionDAO.selectByExample(example);
|
||||
|
||||
// Produce set of names
|
||||
for (Connection connection : connections)
|
||||
names.put(connection.getConnection_id(),
|
||||
connection.getConnection_name());
|
||||
|
||||
return names;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the given database-retrieved Connection into a MySQLConnection.
|
||||
* The parameters of the given connection will be read and added to the
|
||||
* MySQLConnection in the process.
|
||||
*
|
||||
* @param connection The connection to convert.
|
||||
* @param userID The user who queried this connection.
|
||||
* @return A new MySQLConnection containing all data associated with the
|
||||
* specified connection.
|
||||
*/
|
||||
private MySQLConnection toMySQLConnection(Connection connection, int userID) {
|
||||
|
||||
// Build configuration
|
||||
GuacamoleConfiguration config = new GuacamoleConfiguration();
|
||||
|
||||
// Query parameters for configuration
|
||||
ConnectionParameterExample connectionParameterExample = new ConnectionParameterExample();
|
||||
connectionParameterExample.createCriteria().andConnection_idEqualTo(connection.getConnection_id());
|
||||
List<ConnectionParameter> connectionParameters =
|
||||
connectionParameterDAO.selectByExample(connectionParameterExample);
|
||||
|
||||
// Set protocol
|
||||
config.setProtocol(connection.getProtocol());
|
||||
|
||||
// Set all values for all parameters
|
||||
for (ConnectionParameter parameter : connectionParameters)
|
||||
config.setParameter(parameter.getParameter_name(),
|
||||
parameter.getParameter_value());
|
||||
|
||||
// Create new MySQLConnection from retrieved data
|
||||
MySQLConnection mySQLConnection = mySQLConnectionProvider.get();
|
||||
mySQLConnection.init(
|
||||
connection.getConnection_id(),
|
||||
connection.getConnection_name(),
|
||||
config,
|
||||
retrieveHistory(connection.getConnection_id()),
|
||||
userID
|
||||
);
|
||||
|
||||
return mySQLConnection;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the history of the connection having the given ID.
|
||||
*
|
||||
* @param connectionID The ID of the connection to retrieve the history of.
|
||||
* @return A list of MySQLConnectionRecord documenting the history of this
|
||||
* connection.
|
||||
*/
|
||||
public List<MySQLConnectionRecord> retrieveHistory(int connectionID) {
|
||||
|
||||
// Retrieve history records relating to given connection ID
|
||||
ConnectionHistoryExample example = new ConnectionHistoryExample();
|
||||
example.createCriteria().andConnection_idEqualTo(connectionID);
|
||||
|
||||
// We want to return the newest records first
|
||||
example.setOrderByClause("start_date DESC");
|
||||
|
||||
// Set the maximum number of history records returned to 100
|
||||
RowBounds rowBounds = new RowBounds(0, 100);
|
||||
|
||||
// Retrieve all connection history entries
|
||||
List<ConnectionHistory> connectionHistories =
|
||||
connectionHistoryDAO.selectByExampleWithRowbounds(example, rowBounds);
|
||||
|
||||
// Convert history entries to connection records
|
||||
List<MySQLConnectionRecord> connectionRecords = new ArrayList<MySQLConnectionRecord>();
|
||||
Set<Integer> userIDSet = new HashSet<Integer>();
|
||||
for(ConnectionHistory history : connectionHistories) {
|
||||
userIDSet.add(history.getUser_id());
|
||||
}
|
||||
|
||||
// Get all the usernames for the users who are in the history
|
||||
Map<Integer, String> usernameMap = userService.retrieveUsernames(userIDSet);
|
||||
|
||||
// Create the new ConnectionRecords
|
||||
for(ConnectionHistory history : connectionHistories) {
|
||||
Date startDate = history.getStart_date();
|
||||
Date endDate = history.getEnd_date();
|
||||
String username = usernameMap.get(history.getUser_id());
|
||||
MySQLConnectionRecord connectionRecord = new MySQLConnectionRecord(startDate, endDate, username);
|
||||
connectionRecords.add(connectionRecord);
|
||||
}
|
||||
|
||||
return connectionRecords;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a MySQLGuacamoleSocket using the provided connection.
|
||||
*
|
||||
* @param connection The connection to use when connecting the socket.
|
||||
* @param info The information to use when performing the connection
|
||||
* handshake.
|
||||
* @param userID The ID of the user who is connecting to the socket.
|
||||
* @return The connected socket.
|
||||
* @throws GuacamoleException If an error occurs while connecting the
|
||||
* socket.
|
||||
*/
|
||||
public MySQLGuacamoleSocket connect(MySQLConnection connection,
|
||||
GuacamoleClientInformation info, int userID)
|
||||
throws GuacamoleException {
|
||||
|
||||
// If the given connection is active, and multiple simultaneous
|
||||
// connections are not allowed, disallow connection
|
||||
if(GuacamoleProperties.getProperty(
|
||||
MySQLGuacamoleProperties.MYSQL_DISALLOW_SIMULTANEOUS_CONNECTIONS, false)
|
||||
&& activeConnectionSet.isActive(connection.getConnectionID()))
|
||||
throw new GuacamoleClientException("Cannot connect. This connection is in use.");
|
||||
|
||||
// Get guacd connection information
|
||||
String host = GuacamoleProperties.getProperty(GuacamoleProperties.GUACD_HOSTNAME);
|
||||
int port = GuacamoleProperties.getProperty(GuacamoleProperties.GUACD_PORT);
|
||||
|
||||
// Get socket
|
||||
GuacamoleSocket socket = new ConfiguredGuacamoleSocket(
|
||||
new InetGuacamoleSocket(host, port),
|
||||
connection.getConfiguration(), info
|
||||
);
|
||||
|
||||
// Mark this connection as active
|
||||
int historyID = activeConnectionSet.openConnection(connection.getConnectionID(), userID);
|
||||
|
||||
// Return new MySQLGuacamoleSocket
|
||||
MySQLGuacamoleSocket mySQLGuacamoleSocket = mySQLGuacamoleSocketProvider.get();
|
||||
mySQLGuacamoleSocket.init(socket, connection.getConnectionID(), historyID);
|
||||
return mySQLGuacamoleSocket;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new connection having the given name and protocol.
|
||||
*
|
||||
* @param name The name to assign to the new connection.
|
||||
* @param protocol The protocol to assign to the new connection.
|
||||
* @param userID The ID of the user who created this connection.
|
||||
* @return A new MySQLConnection containing the data of the newly created
|
||||
* connection.
|
||||
*/
|
||||
public MySQLConnection createConnection(String name, String protocol, int userID) {
|
||||
|
||||
// Initialize database connection
|
||||
Connection connection = new Connection();
|
||||
connection.setConnection_name(name);
|
||||
connection.setProtocol(protocol);
|
||||
|
||||
// Create connection
|
||||
connectionDAO.insert(connection);
|
||||
return toMySQLConnection(connection, userID);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the connection having the given ID from the database.
|
||||
* @param id The ID of the connection to delete.
|
||||
*/
|
||||
public void deleteConnection(int id) {
|
||||
connectionDAO.deleteByPrimaryKey(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the connection in the database corresponding to the given
|
||||
* MySQLConnection.
|
||||
*
|
||||
* @param mySQLConnection The MySQLConnection to update (save) to the
|
||||
* database. This connection must already exist.
|
||||
*/
|
||||
public void updateConnection(MySQLConnection mySQLConnection) {
|
||||
|
||||
// Populate connection
|
||||
Connection connection = new Connection();
|
||||
connection.setConnection_id(mySQLConnection.getConnectionID());
|
||||
connection.setConnection_name(mySQLConnection.getIdentifier());
|
||||
connection.setProtocol(mySQLConnection.getConfiguration().getProtocol());
|
||||
|
||||
// Update the connection in the database
|
||||
connectionDAO.updateByPrimaryKeySelective(connection);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the names of all the connections defined in the system.
|
||||
*
|
||||
* @return A Set of names of all the connections defined in the system.
|
||||
*/
|
||||
public Set<String> getAllConnectionNames() {
|
||||
|
||||
// Set of all present connection names
|
||||
Set<String> names = new HashSet<String>();
|
||||
|
||||
// Query all connection names
|
||||
List<Connection> connections =
|
||||
connectionDAO.selectByExample(new ConnectionExample());
|
||||
for (Connection connection : connections)
|
||||
names.add(connection.getConnection_name());
|
||||
|
||||
return names;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the connection IDs of all the connections defined in the system.
|
||||
*
|
||||
* @return A list of connection IDs of all the connections defined in the system.
|
||||
*/
|
||||
public List<Integer> getAllConnectionIDs() {
|
||||
|
||||
// Set of all present connection IDs
|
||||
List<Integer> connectionIDs = new ArrayList<Integer>();
|
||||
|
||||
// Query all connection IDs
|
||||
List<Connection> connections =
|
||||
connectionDAO.selectByExample(new ConnectionExample());
|
||||
for (Connection connection : connections)
|
||||
connectionIDs.add(connection.getConnection_id());
|
||||
|
||||
return connectionIDs;
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -39,6 +39,16 @@
|
||||
sqlStatement="SELECT LAST_INSERT_ID()"/>
|
||||
</table>
|
||||
|
||||
<table tableName="guacamole_connection_group"
|
||||
catalog="${guacamole.database.catalog}"
|
||||
schema="${guacamole.database.schema}"
|
||||
domainObjectName="ConnectionGroup" >
|
||||
<property name="useActualColumnNames" value="true"/>
|
||||
<property name="ignoreQualifiersAtRuntime" value="true"/>
|
||||
<generatedKey column="connection_group_id" identity="true"
|
||||
sqlStatement="SELECT LAST_INSERT_ID()"/>
|
||||
</table>
|
||||
|
||||
<table tableName="guacamole_connection_parameter"
|
||||
catalog="${guacamole.database.catalog}"
|
||||
schema="${guacamole.database.schema}"
|
||||
|
Reference in New Issue
Block a user