From 6f39a6582fc8ded29b38c3428e053ff51fadb94d Mon Sep 17 00:00:00 2001 From: devplant Date: Tue, 11 Apr 2023 13:42:06 +0300 Subject: [PATCH] RED-6548 - Username not saved / Email saved as username - extend createUserRequest with username - update the username with the one provided - update also the username in case of updating profile with a new email address --- .../v1/processor/service/UserService.java | 21 ++++++++++++++----- .../api/shared/model/CreateUserRequest.java | 3 +++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java index ef5fc22e0..ad484456b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/UserService.java @@ -92,18 +92,23 @@ public class UserService { @CacheEvict(value = USERS_CACHE, allEntries = true, beforeInvocation = true) public User createUser(CreateUserRequest user) { - if (!realmService.realm(TenantContext.getTenantId()).users().search(user.getEmail()).isEmpty()) { + String username = StringUtils.isEmpty(user.getUsername()) ? user.getEmail() : user.getUsername(); + if (!realmService.realm(TenantContext.getTenantId()).users().search(username).isEmpty()) { throw new ConflictException("User with this username already exists"); } if (!EmailValidator.getInstance().isValid(user.getEmail())) { throw new BadRequestException("Email address format is not valid"); } + // also search by email in case the username was provided at creation + if (!StringUtils.isEmpty(user.getUsername()) && !realmService.realm(TenantContext.getTenantId()).users().searchByEmail(user.getEmail(), true).isEmpty()) { + throw new ConflictException("User with this email already exists"); + } validateRoles(user.getRoles()); UserRepresentation userRepresentation = new UserRepresentation(); - userRepresentation.setUsername(user.getEmail()); + userRepresentation.setUsername(username); userRepresentation.setEmail(user.getEmail()); userRepresentation.setEnabled(true); userRepresentation.setFirstName(user.getFirstName()); @@ -121,7 +126,7 @@ public class UserService { throw new BadRequestException("Cannot create user ... "); } - var createdUser = getUserByUsername(user.getEmail()); + var createdUser = getUserByUsername(username); try { sendResetPasswordEmail(createdUser.getUserId()); @@ -142,7 +147,7 @@ public class UserService { customPermissionService.syncAllCustomPermissions(); - return getUserByUsername(user.getEmail()); + return getUserByUsername(username); } } @@ -367,7 +372,10 @@ public class UserService { userRepresentation.setFirstName(updateProfileRequest.getFirstName()); userRepresentation.setLastName(updateProfileRequest.getLastName()); userRepresentation.setEmail(updateProfileRequest.getEmail()); - userRepresentation.setUsername(updateProfileRequest.getEmail()); + // update the username only if none was provided at creation and in this case the email and username are the same + if (userRepresentation.getUsername().equals(userRepresentation.getEmail())) { + userRepresentation.setUsername(updateProfileRequest.getEmail()); + } try { user.update(userRepresentation); @@ -499,6 +507,9 @@ public class UserService { userRepresentation.setFirstName(updateProfileRequest.getFirstName()); userRepresentation.setLastName(updateProfileRequest.getLastName()); userRepresentation.setEmail(updateProfileRequest.getEmail()); + if (userRepresentation.getUsername().equals(userRepresentation.getEmail())) { + userRepresentation.setUsername(updateProfileRequest.getEmail()); + } user.update(userRepresentation); diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateUserRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateUserRequest.java index 77a34b2a5..5fad6f6c4 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateUserRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/CreateUserRequest.java @@ -12,6 +12,9 @@ public class CreateUserRequest { @Schema(description = "Email of user.") private String email; + @Schema(description = "Username of user.") + private String username; + @Schema(description = "First name of user.") private String firstName;