mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 05:31:22 +00:00
Ticket #269: Move all use of ConnectionMapper to ConnectionService.
This commit is contained in:
@@ -43,7 +43,6 @@ import java.util.Set;
|
|||||||
import net.sourceforge.guacamole.GuacamoleException;
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
import net.sourceforge.guacamole.net.auth.Connection;
|
import net.sourceforge.guacamole.net.auth.Connection;
|
||||||
import net.sourceforge.guacamole.net.auth.Directory;
|
import net.sourceforge.guacamole.net.auth.Directory;
|
||||||
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.dao.ConnectionParameterMapper;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionPermissionMapper;
|
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionPermissionMapper;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionParameter;
|
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionParameter;
|
||||||
@@ -80,12 +79,6 @@ public class ConnectionDirectory implements Directory<String, Connection>{
|
|||||||
@Inject
|
@Inject
|
||||||
private ConnectionService connectionService;
|
private ConnectionService connectionService;
|
||||||
|
|
||||||
/**
|
|
||||||
* Service for manipulating connections in the database.
|
|
||||||
*/
|
|
||||||
@Inject
|
|
||||||
private ConnectionMapper connectionDAO;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service for manipulating connection permissions in the database.
|
* Service for manipulating connection permissions in the database.
|
||||||
*/
|
*/
|
||||||
@@ -132,23 +125,19 @@ public class ConnectionDirectory implements Directory<String, Connection>{
|
|||||||
// Verify permission to create
|
// Verify permission to create
|
||||||
permissionCheckService.verifyCreateConnectionPermission(this.user_id);
|
permissionCheckService.verifyCreateConnectionPermission(this.user_id);
|
||||||
|
|
||||||
// Create database object for insert
|
// Create connection
|
||||||
net.sourceforge.guacamole.net.auth.mysql.model.Connection connection =
|
MySQLConnection connection = connectionService.createConnection(
|
||||||
new net.sourceforge.guacamole.net.auth.mysql.model.Connection();
|
object.getIdentifier(), object.getConfiguration().getProtocol());
|
||||||
|
|
||||||
connection.setConnection_name(object.getIdentifier());
|
|
||||||
connection.setProtocol(object.getConfiguration().getProtocol());
|
|
||||||
connectionDAO.insert(connection);
|
|
||||||
|
|
||||||
// Add connection parameters
|
// Add connection parameters
|
||||||
createConfigurationValues(connection.getConnection_id(),
|
createConfigurationValues(connection.getConnectionID(),
|
||||||
object.getConfiguration());
|
object.getConfiguration());
|
||||||
|
|
||||||
// Finally, give the current user full access to the newly created
|
// Finally, give the current user full access to the newly created
|
||||||
// connection.
|
// connection.
|
||||||
ConnectionPermissionKey newConnectionPermission = new ConnectionPermissionKey();
|
ConnectionPermissionKey newConnectionPermission = new ConnectionPermissionKey();
|
||||||
newConnectionPermission.setUser_id(this.user_id);
|
newConnectionPermission.setUser_id(this.user_id);
|
||||||
newConnectionPermission.setConnection_id(connection.getConnection_id());
|
newConnectionPermission.setConnection_id(connection.getConnectionID());
|
||||||
|
|
||||||
// Read permission
|
// Read permission
|
||||||
newConnectionPermission.setPermission(MySQLConstants.CONNECTION_READ);
|
newConnectionPermission.setPermission(MySQLConstants.CONNECTION_READ);
|
||||||
@@ -208,23 +197,15 @@ public class ConnectionDirectory implements Directory<String, Connection>{
|
|||||||
permissionCheckService.verifyConnectionUpdateAccess(this.user_id, object.getIdentifier());
|
permissionCheckService.verifyConnectionUpdateAccess(this.user_id, object.getIdentifier());
|
||||||
|
|
||||||
MySQLConnection mySQLConnection = (MySQLConnection) object;
|
MySQLConnection mySQLConnection = (MySQLConnection) object;
|
||||||
|
connectionService.updateConnection(mySQLConnection);
|
||||||
// Create database object for insert
|
|
||||||
net.sourceforge.guacamole.net.auth.mysql.model.Connection connection =
|
|
||||||
new net.sourceforge.guacamole.net.auth.mysql.model.Connection();
|
|
||||||
|
|
||||||
connection.setConnection_id(mySQLConnection.getConnectionID());
|
|
||||||
connection.setConnection_name(object.getIdentifier());
|
|
||||||
connection.setProtocol(object.getConfiguration().getProtocol());
|
|
||||||
connectionDAO.updateByPrimaryKey(connection);
|
|
||||||
|
|
||||||
// Delete old connection parameters
|
// Delete old connection parameters
|
||||||
ConnectionParameterExample parameterExample = new ConnectionParameterExample();
|
ConnectionParameterExample parameterExample = new ConnectionParameterExample();
|
||||||
parameterExample.createCriteria().andConnection_idEqualTo(connection.getConnection_id());
|
parameterExample.createCriteria().andConnection_idEqualTo(mySQLConnection.getConnectionID());
|
||||||
connectionParameterDAO.deleteByExample(parameterExample);
|
connectionParameterDAO.deleteByExample(parameterExample);
|
||||||
|
|
||||||
// Add connection parameters
|
// Add connection parameters
|
||||||
createConfigurationValues(connection.getConnection_id(),
|
createConfigurationValues(mySQLConnection.getConnectionID(),
|
||||||
object.getConfiguration());
|
object.getConfiguration());
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -251,7 +232,7 @@ public class ConnectionDirectory implements Directory<String, Connection>{
|
|||||||
connectionPermissionDAO.deleteByExample(connectionPermissionExample);
|
connectionPermissionDAO.deleteByExample(connectionPermissionExample);
|
||||||
|
|
||||||
// Delete the connection itself
|
// Delete the connection itself
|
||||||
connectionDAO.deleteByPrimaryKey(mySQLConnection.getConnectionID());
|
connectionService.deleteConnection(mySQLConnection.getConnectionID());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -60,7 +60,7 @@ import net.sourceforge.guacamole.net.auth.mysql.service.PasswordEncryptionServic
|
|||||||
import net.sourceforge.guacamole.net.auth.mysql.service.PermissionCheckService;
|
import net.sourceforge.guacamole.net.auth.mysql.service.PermissionCheckService;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.service.SaltService;
|
import net.sourceforge.guacamole.net.auth.mysql.service.SaltService;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.service.SecureRandomSaltService;
|
import net.sourceforge.guacamole.net.auth.mysql.service.SecureRandomSaltService;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.service.Sha256PasswordEncryptionService;
|
import net.sourceforge.guacamole.net.auth.mysql.service.SHA256PasswordEncryptionService;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.service.UserService;
|
import net.sourceforge.guacamole.net.auth.mysql.service.UserService;
|
||||||
import net.sourceforge.guacamole.properties.GuacamoleProperties;
|
import net.sourceforge.guacamole.properties.GuacamoleProperties;
|
||||||
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
|
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
|
||||||
@@ -162,7 +162,7 @@ public class MySQLAuthenticationProvider implements AuthenticationProvider {
|
|||||||
bind(UserDirectory.class);
|
bind(UserDirectory.class);
|
||||||
bind(MySQLUser.class);
|
bind(MySQLUser.class);
|
||||||
bind(SaltService.class).to(SecureRandomSaltService.class);
|
bind(SaltService.class).to(SecureRandomSaltService.class);
|
||||||
bind(PasswordEncryptionService.class).to(Sha256PasswordEncryptionService.class);
|
bind(PasswordEncryptionService.class).to(SHA256PasswordEncryptionService.class);
|
||||||
bind(PermissionCheckService.class);
|
bind(PermissionCheckService.class);
|
||||||
bind(ConnectionService.class);
|
bind(ConnectionService.class);
|
||||||
bind(UserService.class);
|
bind(UserService.class);
|
||||||
|
@@ -49,18 +49,16 @@ import java.util.Set;
|
|||||||
import net.sourceforge.guacamole.GuacamoleException;
|
import net.sourceforge.guacamole.GuacamoleException;
|
||||||
import net.sourceforge.guacamole.GuacamoleSecurityException;
|
import net.sourceforge.guacamole.GuacamoleSecurityException;
|
||||||
import net.sourceforge.guacamole.net.auth.Directory;
|
import net.sourceforge.guacamole.net.auth.Directory;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionMapper;
|
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionPermissionMapper;
|
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionPermissionMapper;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.SystemPermissionMapper;
|
import net.sourceforge.guacamole.net.auth.mysql.dao.SystemPermissionMapper;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.UserPermissionMapper;
|
import net.sourceforge.guacamole.net.auth.mysql.dao.UserPermissionMapper;
|
||||||
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.ConnectionPermissionExample;
|
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionPermissionExample;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionPermissionKey;
|
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionPermissionKey;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.model.SystemPermissionExample;
|
import net.sourceforge.guacamole.net.auth.mysql.model.SystemPermissionExample;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.model.SystemPermissionKey;
|
import net.sourceforge.guacamole.net.auth.mysql.model.SystemPermissionKey;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.model.UserPermissionExample;
|
import net.sourceforge.guacamole.net.auth.mysql.model.UserPermissionExample;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.model.UserPermissionKey;
|
import net.sourceforge.guacamole.net.auth.mysql.model.UserPermissionKey;
|
||||||
|
import net.sourceforge.guacamole.net.auth.mysql.service.ConnectionService;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.service.PasswordEncryptionService;
|
import net.sourceforge.guacamole.net.auth.mysql.service.PasswordEncryptionService;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.service.PermissionCheckService;
|
import net.sourceforge.guacamole.net.auth.mysql.service.PermissionCheckService;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.service.SaltService;
|
import net.sourceforge.guacamole.net.auth.mysql.service.SaltService;
|
||||||
@@ -90,10 +88,10 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
|
|||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DAO for accessing connections, which will be injected.
|
* Service for accessing connections.
|
||||||
*/
|
*/
|
||||||
@Inject
|
@Inject
|
||||||
private ConnectionMapper connectionDAO;
|
private ConnectionService connectionService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DAO for accessing user permissions, which will be injected.
|
* DAO for accessing user permissions, which will be injected.
|
||||||
@@ -424,38 +422,35 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
|
|||||||
connectionNames.add(permission.getObjectIdentifier());
|
connectionNames.add(permission.getObjectIdentifier());
|
||||||
|
|
||||||
// Find all the connections by connection name
|
// Find all the connections by connection name
|
||||||
ConnectionExample connectionExample = new ConnectionExample();
|
List<MySQLConnection> connections = connectionService.retrieveConnectionsByName(connectionNames);
|
||||||
connectionExample.createCriteria().andConnection_nameIn(connectionNames);
|
|
||||||
List<Connection> dbConnections = connectionDAO.selectByExample(connectionExample);
|
|
||||||
|
|
||||||
// Build map of found connections, indexed by name
|
// Build map of found connections, indexed by name
|
||||||
Map<String, Connection> dbConnectionMap = new HashMap<String, Connection>();
|
Map<String, MySQLConnection> connectionMap = new HashMap<String, MySQLConnection>();
|
||||||
for (Connection dbConnection : dbConnections) {
|
for (MySQLConnection connection : connections)
|
||||||
dbConnectionMap.put(dbConnection.getConnection_name(), dbConnection);
|
connectionMap.put(connection.getIdentifier(), connection);
|
||||||
}
|
|
||||||
|
|
||||||
// Finally, insert the new permissions
|
// Finally, insert the new permissions
|
||||||
for (ConnectionPermission permission : permissions) {
|
for (ConnectionPermission permission : permissions) {
|
||||||
|
|
||||||
// Get permission
|
// Get permission
|
||||||
Connection dbConnection = dbConnectionMap.get(permission.getObjectIdentifier());
|
MySQLConnection connection = connectionMap.get(permission.getObjectIdentifier());
|
||||||
if (dbConnection == null)
|
if (connection == null)
|
||||||
throw new GuacamoleException(
|
throw new GuacamoleException(
|
||||||
"Connection '" + permission.getObjectIdentifier()
|
"Connection '" + permission.getObjectIdentifier()
|
||||||
+ "' not found.");
|
+ "' not found.");
|
||||||
|
|
||||||
// Throw exception if permission to administer this connection
|
// Throw exception if permission to administer this connection
|
||||||
// is not granted
|
// is not granted
|
||||||
if (!administerableConnections.contains(dbConnection.getConnection_id()))
|
if (!administerableConnections.contains(connection.getConnectionID()))
|
||||||
throw new GuacamoleSecurityException(
|
throw new GuacamoleSecurityException(
|
||||||
"User #" + this.user_id
|
"User #" + this.user_id
|
||||||
+ " does not have permission to administrate connection "
|
+ " does not have permission to administrate connection "
|
||||||
+ dbConnection.getConnection_id());
|
+ connection.getIdentifier());
|
||||||
|
|
||||||
|
|
||||||
// Insert previously-non-existent connection permission
|
// Insert previously-non-existent connection permission
|
||||||
ConnectionPermissionKey newPermission = new ConnectionPermissionKey();
|
ConnectionPermissionKey newPermission = new ConnectionPermissionKey();
|
||||||
newPermission.setConnection_id(dbConnection.getConnection_id());
|
newPermission.setConnection_id(connection.getConnectionID());
|
||||||
newPermission.setPermission(permission.getType().name());
|
newPermission.setPermission(permission.getType().name());
|
||||||
newPermission.setUser_id(user_id);
|
newPermission.setUser_id(user_id);
|
||||||
connectionPermissionDAO.insert(newPermission);
|
connectionPermissionDAO.insert(newPermission);
|
||||||
@@ -488,35 +483,33 @@ public class UserDirectory implements Directory<String, net.sourceforge.guacamol
|
|||||||
identifiers.add(permission.getObjectIdentifier());
|
identifiers.add(permission.getObjectIdentifier());
|
||||||
|
|
||||||
// Find all the connections by identifiers
|
// Find all the connections by identifiers
|
||||||
ConnectionExample connectionExample = new ConnectionExample();
|
List<MySQLConnection> connections = connectionService.retrieveConnectionsByName(identifiers);
|
||||||
connectionExample.createCriteria().andConnection_nameIn(identifiers);
|
|
||||||
List<Connection> dbConnections = connectionDAO.selectByExample(connectionExample);
|
|
||||||
List<Integer> connectionIDs = new ArrayList<Integer>();
|
List<Integer> connectionIDs = new ArrayList<Integer>();
|
||||||
|
|
||||||
// Build map of found connections, indexed by identifier
|
// Build map of found connections, indexed by identifier
|
||||||
Map<String, Connection> dbConnectionMap = new HashMap<String, Connection>();
|
Map<String, MySQLConnection> connectionMap = new HashMap<String, MySQLConnection>();
|
||||||
for (Connection dbConnection : dbConnections) {
|
for (MySQLConnection connection : connections) {
|
||||||
dbConnectionMap.put(dbConnection.getConnection_name(), dbConnection);
|
connectionMap.put(connection.getIdentifier(), connection);
|
||||||
connectionIDs.add(dbConnection.getConnection_id());
|
connectionIDs.add(connection.getConnectionID());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify we have permission to delete each connection permission.
|
// Verify we have permission to delete each connection permission.
|
||||||
for (ConnectionPermission permission : permissions) {
|
for (ConnectionPermission permission : permissions) {
|
||||||
|
|
||||||
// Get user
|
// Get user
|
||||||
Connection dbConnection = dbConnectionMap.get(permission.getObjectIdentifier());
|
MySQLConnection connection = connectionMap.get(permission.getObjectIdentifier());
|
||||||
if (dbConnection == null)
|
if (connection == null)
|
||||||
throw new GuacamoleException(
|
throw new GuacamoleException(
|
||||||
"User '" + permission.getObjectIdentifier()
|
"User '" + permission.getObjectIdentifier()
|
||||||
+ "' not found.");
|
+ "' not found.");
|
||||||
|
|
||||||
// Verify that the user actually has permission to administrate
|
// Verify that the user actually has permission to administrate
|
||||||
// every one of these connections
|
// every one of these connections
|
||||||
if (!administerableConnections.contains(dbConnection.getConnection_id()))
|
if (!administerableConnections.contains(connection.getConnectionID()))
|
||||||
throw new GuacamoleSecurityException(
|
throw new GuacamoleSecurityException(
|
||||||
"User #" + this.user_id
|
"User #" + this.user_id
|
||||||
+ " does not have permission to administrate connection "
|
+ " does not have permission to administrate connection "
|
||||||
+ dbConnection.getConnection_id());
|
+ connection.getIdentifier());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!connectionIDs.isEmpty()) {
|
if(!connectionIDs.isEmpty()) {
|
||||||
|
@@ -162,6 +162,60 @@ public class ConnectionService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the connections having the given IDs from the database.
|
||||||
|
*
|
||||||
|
* @param ids The IDs of the connections to retrieve.
|
||||||
|
* @return A list of existing MySQLConnection objects.
|
||||||
|
*/
|
||||||
|
public List<MySQLConnection> retrieveConnectionsByID(List<Integer> ids) {
|
||||||
|
|
||||||
|
// If no IDs given, just return empty list
|
||||||
|
if (ids.isEmpty())
|
||||||
|
return Collections.EMPTY_LIST;
|
||||||
|
|
||||||
|
// Query connections by ID
|
||||||
|
ConnectionExample example = new ConnectionExample();
|
||||||
|
example.createCriteria().andConnection_idIn(ids);
|
||||||
|
List<Connection> connections = connectionDAO.selectByExample(example);
|
||||||
|
|
||||||
|
// Convert to MySQLConnection list
|
||||||
|
List<MySQLConnection> mySQLConnections = new ArrayList<MySQLConnection>(connections.size());
|
||||||
|
for (Connection connection : connections)
|
||||||
|
mySQLConnections.add(toMySQLConnection(connection));
|
||||||
|
|
||||||
|
// Return found connections
|
||||||
|
return mySQLConnections;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the connections having the given names from the database.
|
||||||
|
*
|
||||||
|
* @param names The names of the connections to retrieve.
|
||||||
|
* @return A list of existing MySQLConnection objects.
|
||||||
|
*/
|
||||||
|
public List<MySQLConnection> retrieveConnectionsByName(List<String> names) {
|
||||||
|
|
||||||
|
// If no names given, just return empty list
|
||||||
|
if (names.isEmpty())
|
||||||
|
return Collections.EMPTY_LIST;
|
||||||
|
|
||||||
|
// Query connections by ID
|
||||||
|
ConnectionExample example = new ConnectionExample();
|
||||||
|
example.createCriteria().andConnection_nameIn(names);
|
||||||
|
List<Connection> connections = connectionDAO.selectByExample(example);
|
||||||
|
|
||||||
|
// Convert to MySQLConnection list
|
||||||
|
List<MySQLConnection> mySQLConnections = new ArrayList<MySQLConnection>(connections.size());
|
||||||
|
for (Connection connection : connections)
|
||||||
|
mySQLConnections.add(toMySQLConnection(connection));
|
||||||
|
|
||||||
|
// Return found connections
|
||||||
|
return mySQLConnections;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert the given database-retrieved Connection into a MySQLConnection.
|
* Convert the given database-retrieved Connection into a MySQLConnection.
|
||||||
* The parameters of the given connection will be read and added to the
|
* The parameters of the given connection will be read and added to the
|
||||||
@@ -277,4 +331,69 @@ public class ConnectionService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
* @return A new MySQLConnection containing the data of the newly created
|
||||||
|
* connection.
|
||||||
|
*/
|
||||||
|
public MySQLConnection createConnection(String name, String protocol) {
|
||||||
|
|
||||||
|
// Initialize database connection
|
||||||
|
Connection connection = new Connection();
|
||||||
|
connection.setConnection_name(name);
|
||||||
|
connection.setProtocol(protocol);
|
||||||
|
|
||||||
|
// Create connection
|
||||||
|
connectionDAO.insert(connection);
|
||||||
|
return toMySQLConnection(connection);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes the connection having the given name from the database.
|
||||||
|
* @param name The name of the connection to delete.
|
||||||
|
*/
|
||||||
|
public void deleteConnection(String name) {
|
||||||
|
|
||||||
|
// Get specified connection
|
||||||
|
MySQLConnection mySQLConnection = retrieveConnection(name);
|
||||||
|
int connection_id = mySQLConnection.getConnectionID();
|
||||||
|
|
||||||
|
// Delete the connection in the database
|
||||||
|
deleteConnection(connection_id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -37,7 +37,6 @@ package net.sourceforge.guacamole.net.auth.mysql.service;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -49,12 +48,9 @@ import net.sourceforge.guacamole.GuacamoleSecurityException;
|
|||||||
import net.sourceforge.guacamole.net.auth.mysql.MySQLConnection;
|
import net.sourceforge.guacamole.net.auth.mysql.MySQLConnection;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.MySQLConstants;
|
import net.sourceforge.guacamole.net.auth.mysql.MySQLConstants;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.MySQLUser;
|
import net.sourceforge.guacamole.net.auth.mysql.MySQLUser;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionMapper;
|
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionPermissionMapper;
|
import net.sourceforge.guacamole.net.auth.mysql.dao.ConnectionPermissionMapper;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.SystemPermissionMapper;
|
import net.sourceforge.guacamole.net.auth.mysql.dao.SystemPermissionMapper;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.dao.UserPermissionMapper;
|
import net.sourceforge.guacamole.net.auth.mysql.dao.UserPermissionMapper;
|
||||||
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.ConnectionPermissionExample;
|
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionPermissionExample;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionPermissionKey;
|
import net.sourceforge.guacamole.net.auth.mysql.model.ConnectionPermissionKey;
|
||||||
import net.sourceforge.guacamole.net.auth.mysql.model.SystemPermissionExample;
|
import net.sourceforge.guacamole.net.auth.mysql.model.SystemPermissionExample;
|
||||||
@@ -65,7 +61,6 @@ import net.sourceforge.guacamole.net.auth.permission.ConnectionPermission;
|
|||||||
import net.sourceforge.guacamole.net.auth.permission.Permission;
|
import net.sourceforge.guacamole.net.auth.permission.Permission;
|
||||||
import net.sourceforge.guacamole.net.auth.permission.SystemPermission;
|
import net.sourceforge.guacamole.net.auth.permission.SystemPermission;
|
||||||
import net.sourceforge.guacamole.net.auth.permission.UserPermission;
|
import net.sourceforge.guacamole.net.auth.permission.UserPermission;
|
||||||
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A service to retrieve information about what objects a user has permission to.
|
* A service to retrieve information about what objects a user has permission to.
|
||||||
@@ -73,11 +68,17 @@ import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
|
|||||||
*/
|
*/
|
||||||
public class PermissionCheckService {
|
public class PermissionCheckService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service for accessing users.
|
||||||
|
*/
|
||||||
@Inject
|
@Inject
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service for accessing connections.
|
||||||
|
*/
|
||||||
@Inject
|
@Inject
|
||||||
private ConnectionMapper connectionDAO;
|
private ConnectionService connectionService;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private UserPermissionMapper userPermissionDAO;
|
private UserPermissionMapper userPermissionDAO;
|
||||||
@@ -88,12 +89,6 @@ public class PermissionCheckService {
|
|||||||
@Inject
|
@Inject
|
||||||
private SystemPermissionMapper systemPermissionDAO;
|
private SystemPermissionMapper systemPermissionDAO;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<MySQLUser> mySQLUserProvider;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Provider<MySQLConnection> mySQLConnectionProvider;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifies that the user has read access to the given user. If not, throws a GuacamoleSecurityException.
|
* Verifies that the user has read access to the given user. If not, throws a GuacamoleSecurityException.
|
||||||
* @param userID
|
* @param userID
|
||||||
@@ -581,9 +576,9 @@ public class PermissionCheckService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private boolean checkConnectionAccess(int userID, String affectedConnectionName, String permissionType) {
|
private boolean checkConnectionAccess(int userID, String affectedConnectionName, String permissionType) {
|
||||||
Connection connection = getConnection(affectedConnectionName);
|
MySQLConnection connection = connectionService.retrieveConnection(affectedConnectionName);
|
||||||
if(connection != null)
|
if(connection != null)
|
||||||
return checkConnectionAccess(userID, connection.getConnection_id(), permissionType);
|
return checkConnectionAccess(userID, connection.getConnectionID(), permissionType);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -684,33 +679,9 @@ public class PermissionCheckService {
|
|||||||
@Deprecated /* FIXME: Totally useless (we only ever need identifiers, and querying ALL CONNECTION DATA will take ages) */
|
@Deprecated /* FIXME: Totally useless (we only ever need identifiers, and querying ALL CONNECTION DATA will take ages) */
|
||||||
private Set<MySQLConnection> getConnections(int userID, String permissionType) {
|
private Set<MySQLConnection> getConnections(int userID, String permissionType) {
|
||||||
|
|
||||||
// If connections available, query them
|
|
||||||
Set<Integer> affectedConnectionIDs = getConnectionIDs(userID, permissionType);
|
Set<Integer> affectedConnectionIDs = getConnectionIDs(userID, permissionType);
|
||||||
if (!affectedConnectionIDs.isEmpty()) {
|
return new HashSet<MySQLConnection>(
|
||||||
|
connectionService.retrieveConnectionsByID(Lists.newArrayList(affectedConnectionIDs)));
|
||||||
// Query available connections
|
|
||||||
ConnectionExample example = new ConnectionExample();
|
|
||||||
example.createCriteria().andConnection_idIn(Lists.newArrayList(affectedConnectionIDs));
|
|
||||||
List<Connection> connectionDBOjects = connectionDAO.selectByExample(example);
|
|
||||||
|
|
||||||
// Add connections to final set
|
|
||||||
Set<MySQLConnection> affectedConnections = new HashSet<MySQLConnection>();
|
|
||||||
for(Connection affectedConnection : connectionDBOjects) {
|
|
||||||
MySQLConnection mySQLConnection = mySQLConnectionProvider.get();
|
|
||||||
mySQLConnection.init(
|
|
||||||
affectedConnection.getConnection_id(),
|
|
||||||
affectedConnection.getConnection_name(),
|
|
||||||
new GuacamoleConfiguration(),
|
|
||||||
Collections.EMPTY_LIST
|
|
||||||
);
|
|
||||||
affectedConnections.add(mySQLConnection);
|
|
||||||
}
|
|
||||||
|
|
||||||
return affectedConnections;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise, no connections available
|
|
||||||
return Collections.EMPTY_SET;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -773,21 +744,6 @@ public class PermissionCheckService {
|
|||||||
return count > 0;
|
return count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a connection object by name.
|
|
||||||
* @param name
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private Connection getConnection(String name) {
|
|
||||||
ConnectionExample example = new ConnectionExample();
|
|
||||||
example.createCriteria().andConnection_nameEqualTo(name);
|
|
||||||
List<Connection> connections = connectionDAO.selectByExample(example);
|
|
||||||
if(connections.isEmpty())
|
|
||||||
return null;
|
|
||||||
|
|
||||||
return connections.get(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all permissions a given user has.
|
* Get all permissions a given user has.
|
||||||
* @param userID
|
* @param userID
|
||||||
@@ -843,19 +799,19 @@ public class PermissionCheckService {
|
|||||||
affectedConnectionIDs.add(connectionPermission.getConnection_id());
|
affectedConnectionIDs.add(connectionPermission.getConnection_id());
|
||||||
|
|
||||||
// Query connections, store in map indexed by connection ID
|
// Query connections, store in map indexed by connection ID
|
||||||
ConnectionExample connectionExample = new ConnectionExample();
|
List<MySQLConnection> connections =
|
||||||
connectionExample.createCriteria().andConnection_idIn(affectedConnectionIDs);
|
connectionService.retrieveConnectionsByID(affectedConnectionIDs);
|
||||||
List<Connection> connections = connectionDAO.selectByExample(connectionExample);
|
Map<Integer, MySQLConnection> connectionMap = new HashMap<Integer, MySQLConnection>();
|
||||||
Map<Integer, Connection> connectionMap = new HashMap<Integer, Connection>();
|
for(MySQLConnection connection : connections)
|
||||||
for(Connection connection : connections)
|
connectionMap.put(connection.getConnectionID(), connection);
|
||||||
connectionMap.put(connection.getConnection_id(), connection);
|
|
||||||
|
|
||||||
// Add connection permissions
|
// Add connection permissions
|
||||||
for(ConnectionPermissionKey connectionPermission : connectionPermissions) {
|
for(ConnectionPermissionKey connectionPermission : connectionPermissions) {
|
||||||
Connection affectedConnection = connectionMap.get(connectionPermission.getConnection_id());
|
MySQLConnection affectedConnection =
|
||||||
|
connectionMap.get(connectionPermission.getConnection_id());
|
||||||
ConnectionPermission newPermission = new ConnectionPermission(
|
ConnectionPermission newPermission = new ConnectionPermission(
|
||||||
ConnectionPermission.Type.valueOf(connectionPermission.getPermission()),
|
ConnectionPermission.Type.valueOf(connectionPermission.getPermission()),
|
||||||
affectedConnection.getConnection_name()
|
affectedConnection.getIdentifier()
|
||||||
);
|
);
|
||||||
allPermissions.add(newPermission);
|
allPermissions.add(newPermission);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user