Browse Source

Refactoring - revert replaceUserCredentials. Added removeUserCredentials and use it instead

pull/14352/head
Volodymyr Babak 10 months ago
parent
commit
7fb7e3f24c
  1. 35
      application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/user/BaseUserProcessor.java
  2. 3
      common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java
  3. 56
      dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java

35
application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/user/BaseUserProcessor.java

@ -23,7 +23,6 @@ import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.UserCredentialsId;
import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.security.UserCredentials;
import org.thingsboard.server.dao.service.DataValidator;
@ -90,40 +89,24 @@ public abstract class BaseUserProcessor extends BaseEdgeProcessor {
}
protected void updateUserCredentials(TenantId tenantId, UserCredentialsUpdateMsg updateMsg) {
UserCredentials userCredentialsFromUpdateMsg = JacksonUtil.fromString(updateMsg.getEntity(), UserCredentials.class, true);
if (userCredentialsFromUpdateMsg == null) {
UserCredentials userCredentials = JacksonUtil.fromString(updateMsg.getEntity(), UserCredentials.class, true);
if (userCredentials == null) {
throw new IllegalArgumentException(String.format("[%s] Failed to parse UserCredentials from updateMsg: %s", tenantId, updateMsg));
}
User user = edgeCtx.getUserService().findUserById(tenantId, userCredentialsFromUpdateMsg.getUserId());
User user = edgeCtx.getUserService().findUserById(tenantId, userCredentials.getUserId());
if (user == null) {
log.warn("[{}] Can't find user by id [{}] skipping credentials update. UserCredentialsUpdateMsg [{}]",
tenantId, userCredentialsFromUpdateMsg.getUserId(), updateMsg);
tenantId, userCredentials.getUserId(), updateMsg);
return;
}
log.debug("[{}] Updating user credentials for user [{}]. New credentials Id [{}], enabled [{}]",
tenantId, user.getName(), userCredentialsFromUpdateMsg.getId(), userCredentialsFromUpdateMsg.isEnabled());
tenantId, user.getName(), userCredentials.getId(), userCredentials.isEnabled());
try {
UserCredentials existing = edgeCtx.getUserService().findUserCredentialsByUserId(tenantId, user.getId());
boolean created = existing == null;
UserCredentialsId oldCredentialsId = created ? null : existing.getId();
UserCredentials updated = created ? new UserCredentials() : existing;
updated.setId(userCredentialsFromUpdateMsg.getId());
updated.setUserId(user.getId());
updated.setEnabled(userCredentialsFromUpdateMsg.isEnabled());
updated.setActivateToken(userCredentialsFromUpdateMsg.getActivateToken());
updated.setAdditionalInfo(userCredentialsFromUpdateMsg.getAdditionalInfo());
updated.setPassword(userCredentialsFromUpdateMsg.getPassword());
updated.setResetToken(userCredentialsFromUpdateMsg.getResetToken());
if (created) {
edgeCtx.getUserService().saveUserCredentials(tenantId, updated, false);
} else {
edgeCtx.getUserService().replaceUserCredentials(tenantId, updated, oldCredentialsId, false);
UserCredentials userCredentialsByUserId = edgeCtx.getUserService().findUserCredentialsByUserId(tenantId, user.getId());
if (userCredentialsByUserId != null && !userCredentialsByUserId.getId().equals(userCredentials.getId())) {
edgeCtx.getUserService().deleteUserCredentials(tenantId, userCredentialsByUserId);
}
edgeCtx.getUserService().saveUserCredentials(tenantId, userCredentials, false);
} catch (Exception e) {
log.error("[{}] Can't update user credentials for user [{}], userCredentialsUpdateMsg [{}]",
tenantId, user.getName(), updateMsg, e);

3
common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java

@ -74,8 +74,7 @@ public interface UserService extends EntityDaoService {
UserCredentials replaceUserCredentials(TenantId tenantId, UserCredentials userCredentials);
UserCredentials replaceUserCredentials(TenantId tenantId, UserCredentials userCredentials,
UserCredentialsId oldUserCredentialsId, boolean doValidate);
void deleteUserCredentials(TenantId tenantId, UserCredentials userCredentials);
void deleteUser(TenantId tenantId, User user);

56
dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java

@ -79,7 +79,6 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@ -99,6 +98,7 @@ public class UserServiceImpl extends AbstractCachedEntityService<UserCacheKey, U
public static final int DEFAULT_TOKEN_LENGTH = 30;
public static final String INCORRECT_USER_ID = "Incorrect userId ";
public static final String INCORRECT_USER_CREDENTIALS_ID = "Incorrect userCredentialsId ";
public static final String INCORRECT_TENANT_ID = "Incorrect tenantId ";
@Value("${security.user_login_case_sensitive:true}")
@ -341,44 +341,28 @@ public class UserServiceImpl extends AbstractCachedEntityService<UserCacheKey, U
@Override
public UserCredentials replaceUserCredentials(TenantId tenantId, UserCredentials userCredentials) {
return replaceUserCredentialsInternal(tenantId, userCredentials, userCredentials.getUuidId(), true);
log.trace("Executing replaceUserCredentials [{}]", userCredentials);
userCredentialsValidator.validate(userCredentials, data -> tenantId);
userCredentialsDao.removeById(tenantId, userCredentials.getUuidId());
userCredentials.setId(null);
if (userCredentials.getPassword() != null) {
updatePasswordHistory(userCredentials);
}
UserCredentials result = userCredentialsDao.save(tenantId, userCredentials);
eventPublisher.publishEvent(ActionEntityEvent.builder()
.tenantId(tenantId)
.entityId(userCredentials.getUserId())
.actionType(ActionType.CREDENTIALS_UPDATED).build());
return result;
}
@Override
public UserCredentials replaceUserCredentials(TenantId tenantId, UserCredentials userCredentials,
UserCredentialsId oldUserCredentialsId, boolean doValidate) {
return replaceUserCredentialsInternal(tenantId, userCredentials, oldUserCredentialsId.getId(), doValidate);
}
private UserCredentials replaceUserCredentialsInternal(TenantId tenantId, UserCredentials userCredentials,
UUID oldCredentialsUuid, boolean doValidate) {
log.trace("[{}] Replacing user credentials for user [{}], old credentials ID [{}]",
tenantId, userCredentials.getUserId(), oldCredentialsUuid);
if (doValidate) {
userCredentialsValidator.validate(userCredentials, data -> tenantId);
}
try {
userCredentialsDao.removeById(tenantId, oldCredentialsUuid);
userCredentials.setId(null);
if (userCredentials.getPassword() != null) {
updatePasswordHistory(userCredentials);
}
UserCredentials savedCredentials = userCredentialsDao.save(tenantId, userCredentials);
eventPublisher.publishEvent(ActionEntityEvent.builder()
.tenantId(tenantId)
.entityId(userCredentials.getUserId())
.actionType(ActionType.CREDENTIALS_UPDATED)
.build());
return savedCredentials;
} catch (Exception e) {
log.error("[{}] Failed to replace user credentials for user [{}]", tenantId, userCredentials.getUserId(), e);
throw new RuntimeException("Failed to replace user credentials", e);
}
public void deleteUserCredentials(TenantId tenantId, UserCredentials userCredentials) {
Objects.requireNonNull(userCredentials, "UserCredentials is null");
UserCredentialsId userCredentialsId = userCredentials.getId();
log.trace("[{}] Executing deleteUserCredentials [{}]", tenantId, userCredentialsId);
validateId(userCredentialsId, id -> INCORRECT_USER_CREDENTIALS_ID + id);
userCredentialsDao.removeById(tenantId, userCredentialsId.getId());
}
@Override

Loading…
Cancel
Save