From d06dda94d76a0853b50ab0b95d34cf3a963eae92 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 26 Feb 2013 19:02:51 -0800 Subject: [PATCH] Ticket #269: Make separation of concerns in MySQLUser more strict. --- .../guacamole/net/auth/mysql/MySQLUser.java | 74 ++++--------------- .../net/auth/mysql/UserDirectory.java | 17 ++++- .../mysql/service/PermissionCheckService.java | 2 +- .../auth/mysql/service/ProviderService.java | 14 +++- 4 files changed, 41 insertions(+), 66 deletions(-) diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/MySQLUser.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/MySQLUser.java index 6b62c4814..111a89669 100644 --- a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/MySQLUser.java +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/MySQLUser.java @@ -35,7 +35,6 @@ * ***** END LICENSE BLOCK ***** */ package net.sourceforge.guacamole.net.auth.mysql; -import com.google.inject.Inject; import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -43,9 +42,6 @@ import net.sourceforge.guacamole.GuacamoleException; import net.sourceforge.guacamole.net.auth.AbstractUser; import net.sourceforge.guacamole.net.auth.User; import net.sourceforge.guacamole.net.auth.mysql.model.UserWithBLOBs; -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.SaltService; import net.sourceforge.guacamole.net.auth.permission.Permission; /** @@ -59,24 +55,6 @@ public class MySQLUser extends AbstractUser { */ private Integer userID; - /** - * Service for encrypting passwords. - */ - @Inject - private PasswordEncryptionService passwordService; - - /** - * Service for generating random salts. - */ - @Inject - private SaltService saltService; - - /** - * Service for checking permissions. - */ - @Inject - private PermissionCheckService permissionCheckService; - /** * The set of current permissions a user has. */ @@ -104,7 +82,7 @@ public class MySQLUser extends AbstractUser { * @param name The name to assign to this MySQLUser. */ public void init(String name) { - setUsername(name); + init(null, name, null, Collections.EMPTY_SET); } /** @@ -116,23 +94,25 @@ public class MySQLUser extends AbstractUser { * data in the given object. */ public void init(User user) throws GuacamoleException { - setUsername(user.getUsername()); - setPassword(user.getPassword()); - permissions.addAll(user.getPermissions()); + init(null, user.getUsername(), user.getPassword(), user.getPermissions()); } /** * Initializes a new MySQLUser initialized from the given data from the * database. * - * @param user The user object, as retrieved from the database. + * @param userID The ID of the user in the database, if any. + * @param username The username of this user. + * @param password The password to assign to this user. + * @param permissions The permissions to assign to this user, as + * retrieved from the database. */ - public void init(UserWithBLOBs user) { - this.userID = user.getUser_id(); - setUsername(user.getUsername()); - - permissions.addAll( - permissionCheckService.getAllPermissions(user.getUser_id())); + public void init(Integer userID, String username, String password, + Set permissions) { + this.userID = userID; + setUsername(username); + setPassword(password); + permissions.addAll(permissions); } /** @@ -211,32 +191,4 @@ public class MySQLUser extends AbstractUser { removedPermissions.add(permission); } - /** - * Converts this MySQLUser into an object that can be inserted/updated - * into the database. Beware that this object does not have associated - * permissions. The permissions of this MySQLUser must be dealt with - * separately. - * - * @return A new UserWithBLOBs containing all associated data of this - * MySQLUser. - */ - public UserWithBLOBs toUserWithBLOBs() { - - // Create new user - UserWithBLOBs user = new UserWithBLOBs(); - user.setUser_id(userID); - user.setUsername(getUsername()); - - // Set password if specified - if (getPassword() != null) { - byte[] salt = saltService.generateSalt(); - user.setPassword_salt(salt); - user.setPassword_hash( - passwordService.createPasswordHash(getPassword(), salt)); - } - - return user; - - } - } diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/UserDirectory.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/UserDirectory.java index be9438099..3d96bfc3a 100644 --- a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/UserDirectory.java +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/UserDirectory.java @@ -694,9 +694,22 @@ public class UserDirectory implements Directory affectedUsers = new HashSet(); for(UserWithBLOBs affectedUser : userDBOjects) { MySQLUser mySQLUser = mySQLUserProvider.get(); - mySQLUser.init(affectedUser); + mySQLUser.init(affectedUser.getUsername()); affectedUsers.add(mySQLUser); } diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/service/ProviderService.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/service/ProviderService.java index aeed45914..815d8bdf3 100644 --- a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/service/ProviderService.java +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/service/ProviderService.java @@ -38,7 +38,6 @@ package net.sourceforge.guacamole.net.auth.mysql.service; import com.google.inject.Inject; import com.google.inject.Provider; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.sourceforge.guacamole.GuacamoleException; import net.sourceforge.guacamole.net.auth.Connection; @@ -83,6 +82,12 @@ public class ProviderService { @Inject Provider mySQLGuacamoleSocketProvider; + /** + * Service for checking permissions. + */ + @Inject + private PermissionCheckService permissionCheckService; + /** * Create a new user based on the provided object. * @param user @@ -134,7 +139,12 @@ public class ProviderService { */ public MySQLUser getExistingMySQLUser(UserWithBLOBs user) { MySQLUser mySQLUser = mySQLUserProvider.get(); - mySQLUser.init(user); + mySQLUser.init( + user.getUser_id(), + user.getUsername(), + permissionCheckService.getAllPermissions(user.getUser_id()) + ); + return mySQLUser; }