mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 09:03:21 +00:00 
			
		
		
		
	Ticket #269: Improvements made with regards to the connection history.
This commit is contained in:
		| @@ -37,7 +37,13 @@ package net.sourceforge.guacamole.net.auth.mysql; | ||||
|  * | ||||
|  * ***** END LICENSE BLOCK ***** */ | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import java.util.Date; | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
| import net.sourceforge.guacamole.GuacamoleException; | ||||
| import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionHistoryMapper; | ||||
| import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionHistory; | ||||
|  | ||||
| /** | ||||
|  * Represents the set of currently active Connections. Whenever a socket is | ||||
| @@ -46,4 +52,70 @@ import java.util.HashSet; | ||||
|  * | ||||
|  * @author James Muehlner | ||||
|  */ | ||||
| public class ActiveConnectionSet extends HashSet<Integer> {} | ||||
| public class ActiveConnectionSet { | ||||
|  | ||||
|     /** | ||||
|      * DAO for accessing connection history. | ||||
|      */ | ||||
|     @Inject | ||||
|     private ConnectionHistoryMapper connectionHistoryDAO; | ||||
|      | ||||
|     /** | ||||
|      * Set of all the connections that are currently active. | ||||
|      */ | ||||
|     private Set<Integer> activeConnectionSet = new HashSet<Integer>(); | ||||
|      | ||||
|     /** | ||||
|      * Check if a connection is currently in use. | ||||
|      * @param connectionID The connection to check the status of. | ||||
|      * @return true if the connection is currently in use. | ||||
|      */ | ||||
|     public boolean isActive(int connectionID) { | ||||
|         return activeConnectionSet.contains(connectionID); | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Set a connection as open. | ||||
|      * @param connectionID The ID of the connection that is being opened. | ||||
|      * @param userID The ID of the user who is opening the connection. | ||||
|      * @return The ID of the history record created for this open connection. | ||||
|      */ | ||||
|     public int openConnection(int connectionID, int userID) { | ||||
|          | ||||
|         // Create the connection history record | ||||
|         ConnectionHistory connectionHistory = new ConnectionHistory(); | ||||
|         connectionHistory.setConnection_id(connectionID); | ||||
|         connectionHistory.setUser_id(userID); | ||||
|         connectionHistory.setStart_date(new Date()); | ||||
|         connectionHistoryDAO.insert(connectionHistory); | ||||
|          | ||||
|         // Mark the connection as active | ||||
|         activeConnectionSet.add(connectionID); | ||||
|          | ||||
|         return connectionHistory.getHistory_id(); | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Set a connection as closed. | ||||
|      * @param connectionID The ID of the connection that is being opened. | ||||
|      * @param historyID The ID of the history record about the open connection. | ||||
|      * @throws GuacamoleException If the open connection history is not found. | ||||
|      */ | ||||
|     public void closeConnection(int connectionID, int historyID) | ||||
|             throws GuacamoleException { | ||||
|          | ||||
|         // Get the existing history record | ||||
|         ConnectionHistory connectionHistory =  | ||||
|                 connectionHistoryDAO.selectByPrimaryKey(historyID); | ||||
|          | ||||
|         if(connectionHistory == null) | ||||
|             throw new GuacamoleException("History record not found."); | ||||
|          | ||||
|         // Update the connection history record to mark that it is now closed | ||||
|         connectionHistory.setEnd_date(new Date()); | ||||
|         connectionHistoryDAO.updateByPrimaryKey(connectionHistory); | ||||
|          | ||||
|         // Remove the connection from the set of active connections. | ||||
|         activeConnectionSet.remove(connectionID); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -105,7 +105,7 @@ public class ConnectionDirectory implements Directory<String, Connection>{ | ||||
|  | ||||
|         // Get connection | ||||
|         MySQLConnection connection = | ||||
|                 connectionService.retrieveConnection(identifier); | ||||
|                 connectionService.retrieveConnection(identifier, user_id); | ||||
|  | ||||
|         // Verify access is granted | ||||
|         permissionCheckService.verifyConnectionAccess( | ||||
| @@ -142,7 +142,8 @@ public class ConnectionDirectory implements Directory<String, Connection>{ | ||||
|  | ||||
|         // Create connection | ||||
|         MySQLConnection connection = connectionService.createConnection( | ||||
|                 object.getIdentifier(), object.getConfiguration().getProtocol()); | ||||
|                 object.getIdentifier(), object.getConfiguration().getProtocol(), | ||||
|                 user_id); | ||||
|  | ||||
|         // Add connection parameters | ||||
|         createConfigurationValues(connection.getConnectionID(), | ||||
| @@ -235,7 +236,7 @@ public class ConnectionDirectory implements Directory<String, Connection>{ | ||||
|  | ||||
|         // Get connection | ||||
|         MySQLConnection mySQLConnection = | ||||
|                 connectionService.retrieveConnection(identifier); | ||||
|                 connectionService.retrieveConnection(identifier, user_id); | ||||
|  | ||||
|         // Verify permission to delete | ||||
|         permissionCheckService.verifyConnectionAccess(this.user_id, | ||||
|   | ||||
| @@ -44,7 +44,6 @@ import java.util.List; | ||||
| import net.sourceforge.guacamole.GuacamoleException; | ||||
| import net.sourceforge.guacamole.net.GuacamoleSocket; | ||||
| import net.sourceforge.guacamole.net.auth.AbstractConnection; | ||||
| import net.sourceforge.guacamole.net.auth.Connection; | ||||
| import net.sourceforge.guacamole.net.auth.ConnectionRecord; | ||||
| import net.sourceforge.guacamole.net.auth.mysql.service.ConnectionService; | ||||
| import net.sourceforge.guacamole.protocol.GuacamoleClientInformation; | ||||
| @@ -60,6 +59,11 @@ public class MySQLConnection extends AbstractConnection { | ||||
|      * The ID associated with this connection in the database. | ||||
|      */ | ||||
|     private Integer connectionID; | ||||
|      | ||||
|     /** | ||||
|      * The ID of the user who queried or created this connection. | ||||
|      */ | ||||
|     private int userID; | ||||
|  | ||||
|     /** | ||||
|      * History of this connection. | ||||
| @@ -94,18 +98,6 @@ public class MySQLConnection extends AbstractConnection { | ||||
|         this.connectionID = connectionID; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Initialize a new MySQLConnection from this existing connection. | ||||
|      * | ||||
|      * @param connection The connection to use when populating the identifier | ||||
|      *                   and configuration of this connection. | ||||
|      * @throws GuacamoleException If permission to read the given connection's | ||||
|      *                            history is denied. | ||||
|      */ | ||||
|     public void init(Connection connection) throws GuacamoleException { | ||||
|         init(null, connection.getIdentifier(), connection.getConfiguration(), connection.getHistory()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Initialize from explicit values. | ||||
|      * | ||||
| @@ -113,21 +105,23 @@ public class MySQLConnection extends AbstractConnection { | ||||
|      * @param identifier The unique identifier associated with this connection. | ||||
|      * @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 connectionID, String identifier, | ||||
|             GuacamoleConfiguration config, | ||||
|             List<? extends ConnectionRecord> history) { | ||||
|             List<? extends ConnectionRecord> history, int userID) { | ||||
|  | ||||
|         this.connectionID = connectionID; | ||||
|         setIdentifier(identifier); | ||||
|         setConfiguration(config); | ||||
|         this.history.addAll(history); | ||||
|  | ||||
|         this.userID = userID; | ||||
|          | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public GuacamoleSocket connect(GuacamoleClientInformation info) throws GuacamoleException { | ||||
|         return connectionService.connect(this, info); | ||||
|         return connectionService.connect(this, info, userID); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -37,14 +37,8 @@ package net.sourceforge.guacamole.net.auth.mysql; | ||||
|  * | ||||
|  * ***** END LICENSE BLOCK ***** */ | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import java.util.Date; | ||||
| import net.sourceforge.guacamole.net.auth.Connection; | ||||
| import net.sourceforge.guacamole.net.auth.ConnectionRecord; | ||||
| import net.sourceforge.guacamole.net.auth.User; | ||||
| import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionHistory; | ||||
| import net.sourceforge.guacamole.net.auth.mysql.service.ConnectionService; | ||||
| import net.sourceforge.guacamole.net.auth.mysql.service.UserService; | ||||
|  | ||||
| /** | ||||
|  * A ConnectionRecord which is based on data stored in MySQL. | ||||
| @@ -54,59 +48,54 @@ import net.sourceforge.guacamole.net.auth.mysql.service.UserService; | ||||
| public class MySQLConnectionRecord implements ConnectionRecord { | ||||
|  | ||||
|     /** | ||||
|      * The database record that this ConnectionRecord represents. | ||||
|      * The start date of the ConnectionRecord. | ||||
|      */ | ||||
|     private ConnectionHistory connectionHistory; | ||||
|     private Date startDate; | ||||
|      | ||||
|     /** | ||||
|      * The end date of the ConnectionRecord. | ||||
|      */ | ||||
|     private Date endDate; | ||||
|      | ||||
|     /** | ||||
|      * The name of the user that is associated with this ConnectionRecord. | ||||
|      */ | ||||
|     private String username; | ||||
|  | ||||
|     /** | ||||
|      * Service for accessing users. | ||||
|      */ | ||||
|     @Inject | ||||
|     private UserService userService; | ||||
|  | ||||
|     /** | ||||
|      * Service for accessing connections. | ||||
|      */ | ||||
|     @Inject | ||||
|     private ConnectionService connectionService; | ||||
|  | ||||
|     /** | ||||
|      * Initialize this MySQLConnectionRecord with the database record it | ||||
|      * represents. | ||||
|      * Initialize this MySQLConnectionRecord with the start/end dates, | ||||
|      * and the name of the user it represents. | ||||
|      * | ||||
|      * @param connectionHistory The ConnectionHistory entry from the database | ||||
|      *                          corresponding to this connection record. | ||||
|      * @param startDate The start date of the connection history. | ||||
|      * @param endDate The end date of the connection history. | ||||
|      * @param username The name of the user that used the connection. | ||||
|      */ | ||||
|     public void init(ConnectionHistory connectionHistory) { | ||||
|         this.connectionHistory = connectionHistory; | ||||
|     public MySQLConnectionRecord(Date startDate, Date endDate, | ||||
|             String username) { | ||||
|         this.startDate = startDate; | ||||
|         this.endDate = endDate; | ||||
|         this.username = username; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Date getStartDate() { | ||||
|         return connectionHistory.getStart_date(); | ||||
|         return startDate; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Date getEndDate() { | ||||
|         return connectionHistory.getEnd_date(); | ||||
|         return endDate; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public User getUser() { | ||||
|         // FIXME: This will be SLOW - history is queried in bulk. When listed | ||||
|         // to the user in the webapp, this will result in one query per record. | ||||
|         return userService.retrieveUser(connectionHistory.getUser_id()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Connection getConnection() { | ||||
|         return connectionService.retrieveConnection(connectionHistory.getConnection_id()); | ||||
|     public String getUsername() { | ||||
|         return username; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isActive() { | ||||
|         // If the end date hasn't been stored yet, the connection is still open. | ||||
|         return connectionHistory.getEnd_date() == null; | ||||
|         return endDate == null; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -65,6 +65,12 @@ public class MySQLGuacamoleSocket implements GuacamoleSocket { | ||||
|      * socket. | ||||
|      */ | ||||
|     private int connectionID; | ||||
|      | ||||
|     /** | ||||
|      * The ID of the history record associated with this instance of the | ||||
|      * connection. | ||||
|      */ | ||||
|     private int historyID; | ||||
|  | ||||
|     /** | ||||
|      * Initialize this MySQLGuacamoleSocket with the provided GuacamoleSocket. | ||||
| @@ -72,10 +78,13 @@ public class MySQLGuacamoleSocket implements GuacamoleSocket { | ||||
|      * @param socket The ConfiguredGuacamoleSocket to wrap. | ||||
|      * @param connectionID The ID of the connection associated with the given | ||||
|      *                     socket. | ||||
|      * @param historyID The ID of the history record associated with this | ||||
|      *                  instance of the connection. | ||||
|      */ | ||||
|     public void init(GuacamoleSocket socket, int connectionID) { | ||||
|     public void init(GuacamoleSocket socket, int connectionID, int historyID) { | ||||
|         this.socket = socket; | ||||
|         this.connectionID = connectionID; | ||||
|         this.historyID = historyID; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -95,8 +104,7 @@ public class MySQLGuacamoleSocket implements GuacamoleSocket { | ||||
|         socket.close(); | ||||
|  | ||||
|         // Mark this connection as inactive | ||||
|         activeConnectionSet.remove(connectionID); | ||||
|  | ||||
|         activeConnectionSet.closeConnection(connectionID, historyID); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -37,13 +37,18 @@ package net.sourceforge.guacamole.net.auth.mysql.service; | ||||
|  * | ||||
|  * ***** 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.GuacamoleException; | ||||
| import net.sourceforge.guacamole.net.GuacamoleSocket; | ||||
| import net.sourceforge.guacamole.net.InetGuacamoleSocket; | ||||
| @@ -98,12 +103,6 @@ public class ConnectionService { | ||||
|     @Inject | ||||
|     private Provider<MySQLConnection> mySQLConnectionProvider; | ||||
|  | ||||
|     /** | ||||
|      * Provider which creates MySQLConnectionRecords. | ||||
|      */ | ||||
|     @Inject | ||||
|     private Provider<MySQLConnectionRecord> mySQLConnectionRecordProvider; | ||||
|  | ||||
|     /** | ||||
|      * Provider which creates MySQLGuacamoleSockets. | ||||
|      */ | ||||
| @@ -115,15 +114,22 @@ public class ConnectionService { | ||||
|      */ | ||||
|     @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) { | ||||
|     public MySQLConnection retrieveConnection(String name, int userID) { | ||||
|  | ||||
|         // Query connection by connection identifier (name) | ||||
|         ConnectionExample example = new ConnectionExample(); | ||||
| @@ -139,7 +145,7 @@ public class ConnectionService { | ||||
|         assert connections.size() == 1 : "Multiple connections with same name."; | ||||
|  | ||||
|         // Otherwise, return found connection | ||||
|         return toMySQLConnection(connections.get(0)); | ||||
|         return toMySQLConnection(connections.get(0), userID); | ||||
|  | ||||
|     } | ||||
|  | ||||
| @@ -147,10 +153,11 @@ public class ConnectionService { | ||||
|      * 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) { | ||||
|     public MySQLConnection retrieveConnection(int id, int userID) { | ||||
|  | ||||
|         // Query connection by ID | ||||
|         Connection connection = connectionDAO.selectByPrimaryKey(id); | ||||
| @@ -160,8 +167,7 @@ public class ConnectionService { | ||||
|             return null; | ||||
|  | ||||
|         // Otherwise, return found connection | ||||
|         return toMySQLConnection(connection); | ||||
|  | ||||
|         return toMySQLConnection(connection, userID); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -202,7 +208,7 @@ public class ConnectionService { | ||||
|      * @return A map containing the names of all connections and their | ||||
|      *         corresponding IDs. | ||||
|      */ | ||||
|     public Map<Integer, String> retrieveNames(List<Integer> ids) { | ||||
|     public Map<Integer, String> retrieveNames(Collection<Integer> ids) { | ||||
|  | ||||
|         // If no IDs given, just return empty map | ||||
|         if (ids.isEmpty()) | ||||
| @@ -213,7 +219,7 @@ public class ConnectionService { | ||||
|  | ||||
|         // Get all connections having the given IDs | ||||
|         ConnectionExample example = new ConnectionExample(); | ||||
|         example.createCriteria().andConnection_idIn(ids); | ||||
|         example.createCriteria().andConnection_idIn(Lists.newArrayList(ids)); | ||||
|         List<Connection> connections = connectionDAO.selectByExample(example); | ||||
|  | ||||
|         // Produce set of names | ||||
| @@ -231,10 +237,11 @@ public class ConnectionService { | ||||
|      * 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) { | ||||
|     private MySQLConnection toMySQLConnection(Connection connection, int userID) { | ||||
|  | ||||
|         // Build configuration | ||||
|         GuacamoleConfiguration config = new GuacamoleConfiguration(); | ||||
| @@ -259,7 +266,8 @@ public class ConnectionService { | ||||
|             connection.getConnection_id(), | ||||
|             connection.getConnection_name(), | ||||
|             config, | ||||
|             retrieveHistory(connection.getConnection_id()) | ||||
|             retrieveHistory(connection.getConnection_id()), | ||||
|             userID | ||||
|         ); | ||||
|  | ||||
|         return mySQLConnection; | ||||
| @@ -274,7 +282,7 @@ public class ConnectionService { | ||||
|      *         connection. | ||||
|      */ | ||||
|     public List<MySQLConnectionRecord> retrieveHistory(int connectionID) { | ||||
|  | ||||
|          | ||||
|         // Retrieve history records relating to given connection ID | ||||
|         ConnectionHistoryExample example = new ConnectionHistoryExample(); | ||||
|         example.createCriteria().andConnection_idEqualTo(connectionID); | ||||
| @@ -287,13 +295,21 @@ public class ConnectionService { | ||||
|  | ||||
|         // Convert history entries to connection records | ||||
|         List<MySQLConnectionRecord> connectionRecords = new ArrayList<MySQLConnectionRecord>(); | ||||
|         Set<Integer> userIDSet = new HashSet<Integer>(); | ||||
|         for(ConnectionHistory history : connectionHistories) { | ||||
|  | ||||
|             // Create connection record from history | ||||
|             MySQLConnectionRecord record = mySQLConnectionRecordProvider.get(); | ||||
|             record.init(history); | ||||
|             connectionRecords.add(record); | ||||
|  | ||||
|             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; | ||||
| @@ -305,19 +321,20 @@ public class ConnectionService { | ||||
|      * @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) | ||||
|             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.contains(connection.getConnectionID())) | ||||
|                 && activeConnectionSet.isActive(connection.getConnectionID())) | ||||
|             throw new GuacamoleException("Cannot connect. This connection is in use."); | ||||
|  | ||||
|         // Get guacd connection information | ||||
| @@ -331,13 +348,11 @@ public class ConnectionService { | ||||
|         ); | ||||
|  | ||||
|         // Mark this connection as active | ||||
|         activeConnectionSet.add(connection.getConnectionID()); | ||||
|  | ||||
|         // TODO: Actually update history... | ||||
|          | ||||
|         int historyID = activeConnectionSet.openConnection(connection.getConnectionID(), userID); | ||||
|                  | ||||
|         // Return new MySQLGuacamoleSocket | ||||
|         MySQLGuacamoleSocket mySQLGuacamoleSocket = mySQLGuacamoleSocketProvider.get(); | ||||
|         mySQLGuacamoleSocket.init(socket, connection.getConnectionID()); | ||||
|         mySQLGuacamoleSocket.init(socket, connection.getConnectionID(), historyID); | ||||
|         return mySQLGuacamoleSocket; | ||||
|  | ||||
|     } | ||||
| @@ -347,10 +362,11 @@ public class ConnectionService { | ||||
|      * | ||||
|      * @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) { | ||||
|     public MySQLConnection createConnection(String name, String protocol, int userID) { | ||||
|  | ||||
|         // Initialize database connection | ||||
|         Connection connection = new Connection(); | ||||
| @@ -359,7 +375,7 @@ public class ConnectionService { | ||||
|  | ||||
|         // Create connection | ||||
|         connectionDAO.insert(connection); | ||||
|         return toMySQLConnection(connection); | ||||
|         return toMySQLConnection(connection, userID); | ||||
|  | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -37,8 +37,10 @@ package net.sourceforge.guacamole.net.auth.mysql.service; | ||||
|  * | ||||
|  * ***** END LICENSE BLOCK ***** */ | ||||
|  | ||||
| import com.google.common.collect.Lists; | ||||
| import com.google.inject.Inject; | ||||
| import com.google.inject.Provider; | ||||
| import java.util.Collection; | ||||
| import java.util.Collections; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| @@ -270,7 +272,7 @@ public class UserService { | ||||
|      * @return A map containing the names of all users and their corresponding | ||||
|      *         IDs. | ||||
|      */ | ||||
|     public Map<Integer, String> retrieveUsernames(List<Integer> ids) { | ||||
|     public Map<Integer, String> retrieveUsernames(Collection<Integer> ids) { | ||||
|  | ||||
|         // If no IDs given, just return empty map | ||||
|         if (ids.isEmpty()) | ||||
| @@ -281,7 +283,7 @@ public class UserService { | ||||
|  | ||||
|         // Get all users having the given IDs | ||||
|         UserExample example = new UserExample(); | ||||
|         example.createCriteria().andUser_idIn(ids); | ||||
|         example.createCriteria().andUser_idIn(Lists.newArrayList(ids)); | ||||
|         List<net.sourceforge.guacamole.net.auth.mysql.model.User> users = | ||||
|                 userDAO.selectByExample(example); | ||||
|  | ||||
|   | ||||
| @@ -84,6 +84,8 @@ | ||||
|             domainObjectName="ConnectionHistory" > | ||||
|             <property name="useActualColumnNames" value="true"/> | ||||
|             <property name="ignoreQualifiersAtRuntime" value="true"/> | ||||
|             <generatedKey column="history_id" identity="true" | ||||
|                 sqlStatement="SELECT LAST_INSERT_ID()"/> | ||||
|         </table> | ||||
|  | ||||
|     </context> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user