diff --git a/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/AbstractAdminService.java b/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/AbstractAdminService.java index c01d6816ed..50038eb595 100644 --- a/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/AbstractAdminService.java +++ b/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/AbstractAdminService.java @@ -49,6 +49,7 @@ import org.kaaproject.kaa.server.common.plugin.PluginConfig; import org.kaaproject.kaa.server.common.plugin.PluginType; import org.kaaproject.kaa.server.control.service.ControlService; +import org.kaaproject.kaa.server.control.service.exception.ControlServiceException; import org.kaaproject.kaa.server.control.service.sdk.SchemaUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,7 +69,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; +import static org.kaaproject.kaa.server.admin.services.util.Utils.checkFieldUniquieness; import static org.kaaproject.kaa.server.admin.services.util.Utils.getCurrentUser; import static org.kaaproject.kaa.server.admin.shared.schema.ConverterType.CONFIGURATION_FORM_AVRO_CONVERTER; import static org.kaaproject.kaa.server.admin.shared.util.Utils.isEmpty; @@ -301,7 +304,7 @@ RecordField createRecordFieldFromCtlSchemaAndBody(String ctlSchemaId, String bod } } - Long saveUser(org.kaaproject.kaa.common.dto.admin.UserDto user) throws Exception { + CreateUserResult saveUser(org.kaaproject.kaa.common.dto.admin.UserDto user) throws Exception { CreateUserResult result = userFacade.saveUserDto(user, passwordEncoder); try { if (!isEmpty(result.getPassword())) { @@ -320,7 +323,69 @@ Long saveUser(org.kaaproject.kaa.common.dto.admin.UserDto user) throws Exception } throw new KaaAdminServiceException(String.valueOf(errorMessage.append("See server logs for details.")), ServiceErrorCode.GENERAL_ERROR); } - return result.getUserId(); + return result; + } + + String createNewUser(org.kaaproject.kaa.common.dto.admin.UserDto user) throws Exception { + checkFieldUniquieness( + user.getUsername(), + userFacade.getAll().stream().map(u -> u.getUsername()).collect(Collectors.toSet()), + "userName" + ); + + checkFieldUniquieness( + user.getMail(), + userFacade.getAll().stream().map(u -> u.getMail()).collect(Collectors.toSet()), + "email" + ); + + CreateUserResult result = saveUser(user); + user.setExternalUid(result.getUserId().toString()); + return result.getPassword(); + } + + void editUserFacadeUser(org.kaaproject.kaa.common.dto.admin.UserDto user) + throws KaaAdminServiceException, ControlServiceException { + User storedUserOld = userFacade.findByUserName(user.getUsername()); + + user.setExternalUid(String.valueOf(storedUserOld.getId())); + UserDto storedUserNew = controlService.getUser(user.getId()); + Utils.checkNotNull(storedUserNew); + if(!getCurrentUser().getAuthority().equals(KaaAuthorityDto.KAA_ADMIN)) { + checkTenantId(storedUserNew.getTenantId()); + } + + storedUserOld.setMail(user.getMail()); + storedUserOld.setFirstName(user.getFirstName()); + storedUserOld.setLastName(user.getLastName()); + userFacade.save(storedUserOld); + } + + org.kaaproject.kaa.common.dto.admin.UserDto editControlServiceUser(org.kaaproject.kaa.common.dto.admin.UserDto user) + throws KaaAdminServiceException, ControlServiceException { + if (!isEmpty(getTenantId())) { + user.setTenantId(getTenantId()); + } else { + user.setTenantId(user.getTenantId()); + } + org.kaaproject.kaa.common.dto.UserDto savedUser = controlService.editUser(user); + + return toUser(savedUser); + } + + void checkCreateUserPermission(UserDto user) throws KaaAdminServiceException { + if(user.getAuthority().equals(KaaAuthorityDto.TENANT_ADMIN)){ + checkAuthority(KaaAuthorityDto.KAA_ADMIN); + } else { + checkAuthority(KaaAuthorityDto.TENANT_ADMIN); + if (!isEmpty(user.getTenantId())) { + checkTenantId(user.getTenantId()); + } + } + } + + void checkEditUserPermission(UserDto user) throws KaaAdminServiceException, ControlServiceException { + checkUserId(user.getId()); } void setPluginJsonConfigurationFromRaw(PluginDto plugin, PluginType type) { diff --git a/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/UserServiceImpl.java b/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/UserServiceImpl.java index 09823fc91e..1f5a53628d 100644 --- a/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/UserServiceImpl.java +++ b/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/UserServiceImpl.java @@ -20,7 +20,6 @@ import org.kaaproject.kaa.common.dto.KaaAuthorityDto; import org.kaaproject.kaa.common.dto.UserDto; import org.kaaproject.kaa.common.dto.admin.UserProfileUpdateDto; -import org.kaaproject.kaa.server.admin.services.entity.CreateUserResult; import org.kaaproject.kaa.server.admin.services.entity.User; import org.kaaproject.kaa.server.admin.services.util.Utils; import org.kaaproject.kaa.server.admin.shared.services.KaaAdminServiceException; @@ -29,9 +28,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; -import static org.kaaproject.kaa.server.admin.services.util.Utils.checkFieldUniquieness; import static org.kaaproject.kaa.server.admin.services.util.Utils.getCurrentUser; import static org.kaaproject.kaa.server.admin.shared.util.Utils.isEmpty; @@ -104,67 +101,22 @@ public org.kaaproject.kaa.common.dto.admin.UserDto getUser(String userId) throws public org.kaaproject.kaa.common.dto.admin.UserDto editUser(org.kaaproject.kaa.common.dto.admin.UserDto user) throws KaaAdminServiceException { try { - boolean createNewUser = (user.getId() == null); String tempPassword = null; if (createNewUser) { - if(user.getAuthority().equals(KaaAuthorityDto.TENANT_ADMIN)){ - checkAuthority(KaaAuthorityDto.KAA_ADMIN); - } else { - checkAuthority(KaaAuthorityDto.TENANT_ADMIN); - if (!isEmpty(user.getTenantId())) { - checkTenantId(user.getTenantId()); - } - } - - checkFieldUniquieness( - user.getMail(), - userFacade.getAll().stream().map(u -> u.getMail()).collect(Collectors.toSet()), - "email" - ); - - checkFieldUniquieness( - user.getUsername(), - userFacade.getAll().stream().map(u -> u.getUsername()).collect(Collectors.toSet()), - "userName" - ); - - CreateUserResult result = userFacade.saveUserDto(user, passwordEncoder); - user.setExternalUid(result.getUserId().toString()); - tempPassword = result.getPassword(); - } else { - User stored = userFacade.findByUserName(user.getUsername()); - - user.setExternalUid(String.valueOf(stored.getId())); - checkUserId(user.getId()); - - UserDto storedUser = controlService.getUser(user.getId()); - Utils.checkNotNull(storedUser); - if(!getCurrentUser().getAuthority().equals(KaaAuthorityDto.KAA_ADMIN)) { - checkTenantId(storedUser.getTenantId()); - } - } - - Long userId = saveUser(user); - org.kaaproject.kaa.common.dto.admin.UserDto userDto = new org.kaaproject.kaa.common.dto.admin.UserDto(); - userDto.setId(user.getId()); - userDto.setUsername(user.getUsername()); - userDto.setExternalUid(userId.toString()); - if (!isEmpty(getTenantId())) { - userDto.setTenantId(getTenantId()); + checkCreateUserPermission(user); + tempPassword = createNewUser(user); } else { - userDto.setTenantId(user.getTenantId()); + checkEditUserPermission(user); + editUserFacadeUser(user); } - userDto.setAuthority(user.getAuthority()); - org.kaaproject.kaa.common.dto.UserDto savedUser = controlService.editUser(userDto); - org.kaaproject.kaa.common.dto.admin.UserDto editedUser = toUser(savedUser); + org.kaaproject.kaa.common.dto.admin.UserDto editedUser = editControlServiceUser(user); if (StringUtils.isNotBlank(tempPassword)) { editedUser.setTempPassword(tempPassword); } return editedUser; - } catch (Exception e) { throw Utils.handleException(e); }