From 9c161c9fc6580bbefe2b0dd57a7c345d79729c8c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 15 Feb 2015 14:06:20 -0800 Subject: [PATCH] GUAC-1101: Allow implementations to validate objects prior to create/update. --- .../mysql/service/DirectoryObjectService.java | 60 +++++++++++++++++++ .../net/auth/mysql/service/UserService.java | 41 +++++++++++++ 2 files changed, 101 insertions(+) diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/service/DirectoryObjectService.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/service/DirectoryObjectService.java index b512d7562..8afef0220 100644 --- a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/service/DirectoryObjectService.java +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/service/DirectoryObjectService.java @@ -159,6 +159,55 @@ public abstract class DirectoryObjectService existing = userMapper.select(Collections.singleton(object.getIdentifier())); + if (!existing.isEmpty()) + throw new GuacamoleClientException("User \"" + object.getIdentifier() + "\" already exists."); + + } + + @Override + protected void validateExistingObject(AuthenticatedUser user, + MySQLUser object) throws GuacamoleException { + + // Username must not be blank + if (object.getIdentifier().trim().isEmpty()) + throw new GuacamoleClientException("The username must not be blank."); + + // Check whether such a user is already present + MySQLUser existing = retrieveObject(user, object.getIdentifier()); + if (existing != null) { + + UserModel existingModel = existing.getModel(); + UserModel updatedModel = object.getModel(); + + // Do not rename to existing user + if (!existingModel.getUserID().equals(updatedModel.getUserID())) + throw new GuacamoleClientException("User \"" + object.getIdentifier() + "\" already exists."); + + } + + } + /** * Retrieves the user corresponding to the given credentials from the * database.