Merge pull request #11644 from dashevchenko/userDashboardFix
Check default and home dashboard exists when GET /auth/user
This commit is contained in:
commit
1b890ac0cd
@ -82,7 +82,9 @@ public class AuthController extends BaseController {
|
||||
@GetMapping(value = "/auth/user")
|
||||
public User getUser() throws ThingsboardException {
|
||||
SecurityUser securityUser = getCurrentUser();
|
||||
return userService.findUserById(securityUser.getTenantId(), securityUser.getId());
|
||||
User user = userService.findUserById(securityUser.getTenantId(), securityUser.getId());
|
||||
checkDashboardInfo(user.getAdditionalInfo());
|
||||
return user;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Logout (logout)",
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.thingsboard.server.controller;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import jakarta.mail.MessagingException;
|
||||
@ -113,6 +114,7 @@ import org.thingsboard.server.common.data.rpc.Rpc;
|
||||
import org.thingsboard.server.common.data.rule.RuleChain;
|
||||
import org.thingsboard.server.common.data.rule.RuleChainType;
|
||||
import org.thingsboard.server.common.data.rule.RuleNode;
|
||||
import org.thingsboard.server.common.data.security.UserCredentials;
|
||||
import org.thingsboard.server.common.data.util.ThrowingBiFunction;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||
import org.thingsboard.server.common.data.widget.WidgetsBundle;
|
||||
@ -187,6 +189,8 @@ import java.util.stream.Collectors;
|
||||
|
||||
import static org.thingsboard.server.common.data.StringUtils.isNotEmpty;
|
||||
import static org.thingsboard.server.common.data.query.EntityKeyType.ENTITY_FIELD;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.DEFAULT_DASHBOARD;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.HOME_DASHBOARD;
|
||||
import static org.thingsboard.server.controller.UserController.YOU_DON_T_HAVE_PERMISSION_TO_PERFORM_THIS_OPERATION;
|
||||
import static org.thingsboard.server.dao.service.Validator.validateId;
|
||||
|
||||
@ -872,11 +876,36 @@ public abstract class BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
protected void processDashboardIdFromAdditionalInfo(ObjectNode additionalInfo, String requiredFields) throws ThingsboardException {
|
||||
String dashboardId = additionalInfo.has(requiredFields) ? additionalInfo.get(requiredFields).asText() : null;
|
||||
if (dashboardId != null && !dashboardId.equals("null")) {
|
||||
if (dashboardService.findDashboardById(getTenantId(), new DashboardId(UUID.fromString(dashboardId))) == null) {
|
||||
additionalInfo.remove(requiredFields);
|
||||
protected void checkUserInfo(User user) throws ThingsboardException {
|
||||
if (user.getAdditionalInfo() instanceof ObjectNode additionalInfo) {
|
||||
checkDashboardInfo(additionalInfo);
|
||||
|
||||
UserCredentials userCredentials = userService.findUserCredentialsByUserId(user.getTenantId(), user.getId());
|
||||
if (userCredentials.isEnabled() && !additionalInfo.has("userCredentialsEnabled")) {
|
||||
additionalInfo.put("userCredentialsEnabled", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkDashboardInfo(JsonNode additionalInfo) throws ThingsboardException {
|
||||
checkDashboardInfo(additionalInfo, DEFAULT_DASHBOARD);
|
||||
checkDashboardInfo(additionalInfo, HOME_DASHBOARD);
|
||||
}
|
||||
|
||||
protected void checkDashboardInfo(JsonNode node, String dashboardField) throws ThingsboardException {
|
||||
if (node instanceof ObjectNode additionalInfo) {
|
||||
DashboardId dashboardId = Optional.ofNullable(additionalInfo.get(dashboardField))
|
||||
.filter(JsonNode::isTextual).map(JsonNode::asText)
|
||||
.map(id -> {
|
||||
try {
|
||||
return new DashboardId(UUID.fromString(id));
|
||||
} catch (IllegalArgumentException e) {
|
||||
return null;
|
||||
}
|
||||
}).orElse(null);
|
||||
|
||||
if (dashboardId != null && !dashboardService.existsById(getTenantId(), dashboardId)) {
|
||||
additionalInfo.remove(dashboardField);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,9 +80,7 @@ public class CustomerController extends BaseController {
|
||||
checkParameter(CUSTOMER_ID, strCustomerId);
|
||||
CustomerId customerId = new CustomerId(toUUID(strCustomerId));
|
||||
Customer customer = checkCustomerId(customerId, Operation.READ);
|
||||
if (!customer.getAdditionalInfo().isNull()) {
|
||||
processDashboardIdFromAdditionalInfo((ObjectNode) customer.getAdditionalInfo(), HOME_DASHBOARD);
|
||||
}
|
||||
checkDashboardInfo(customer.getAdditionalInfo(), HOME_DASHBOARD);
|
||||
return customer;
|
||||
}
|
||||
|
||||
@ -181,7 +179,8 @@ public class CustomerController extends BaseController {
|
||||
public Customer getTenantCustomer(
|
||||
@Parameter(description = "A string value representing the Customer title.")
|
||||
@RequestParam String customerTitle) throws ThingsboardException {
|
||||
TenantId tenantId = getCurrentUser().getTenantId();
|
||||
TenantId tenantId = getCurrentUser().getTenantId();
|
||||
return checkNotNull(customerService.findCustomerByTenantIdAndTitle(tenantId, customerTitle), "Customer with title [" + customerTitle + "] is not found");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -15,7 +15,6 @@
|
||||
*/
|
||||
package org.thingsboard.server.controller;
|
||||
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -79,9 +78,7 @@ public class TenantController extends BaseController {
|
||||
checkParameter(TENANT_ID, strTenantId);
|
||||
TenantId tenantId = TenantId.fromUUID(toUUID(strTenantId));
|
||||
Tenant tenant = checkTenantId(tenantId, Operation.READ);
|
||||
if (!tenant.getAdditionalInfo().isNull()) {
|
||||
processDashboardIdFromAdditionalInfo((ObjectNode) tenant.getAdditionalInfo(), HOME_DASHBOARD);
|
||||
}
|
||||
checkDashboardInfo(tenant.getAdditionalInfo(), HOME_DASHBOARD);
|
||||
return tenant;
|
||||
}
|
||||
|
||||
|
||||
@ -16,7 +16,6 @@
|
||||
package org.thingsboard.server.controller;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
@ -92,8 +91,6 @@ import static org.thingsboard.server.controller.ControllerConstants.ALARM_ID_PAR
|
||||
import static org.thingsboard.server.controller.ControllerConstants.CUSTOMER_ID;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.CUSTOMER_ID_PARAM_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.DASHBOARD_ID_PARAM_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.DEFAULT_DASHBOARD;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.HOME_DASHBOARD;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_DATA_PARAMETERS;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_NUMBER_DESCRIPTION;
|
||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_SIZE_DESCRIPTION;
|
||||
@ -146,15 +143,7 @@ public class UserController extends BaseController {
|
||||
checkParameter(USER_ID, strUserId);
|
||||
UserId userId = new UserId(toUUID(strUserId));
|
||||
User user = checkUserId(userId, Operation.READ);
|
||||
if (user.getAdditionalInfo().isObject()) {
|
||||
ObjectNode additionalInfo = (ObjectNode) user.getAdditionalInfo();
|
||||
processDashboardIdFromAdditionalInfo(additionalInfo, DEFAULT_DASHBOARD);
|
||||
processDashboardIdFromAdditionalInfo(additionalInfo, HOME_DASHBOARD);
|
||||
UserCredentials userCredentials = userService.findUserCredentialsByUserId(user.getTenantId(), user.getId());
|
||||
if (userCredentials.isEnabled() && !additionalInfo.has("userCredentialsEnabled")) {
|
||||
additionalInfo.put("userCredentialsEnabled", true);
|
||||
}
|
||||
}
|
||||
checkUserInfo(user);
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
@ -76,4 +76,6 @@ public interface DashboardService extends EntityDaoService {
|
||||
|
||||
List<Dashboard> findTenantDashboardsByTitle(TenantId tenantId, String title);
|
||||
|
||||
boolean existsById(TenantId tenantId, DashboardId dashboardId);
|
||||
|
||||
}
|
||||
|
||||
@ -385,6 +385,11 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb
|
||||
return dashboardDao.findByTenantIdAndTitle(tenantId.getId(), title);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsById(TenantId tenantId, DashboardId dashboardId) {
|
||||
return dashboardDao.existsById(tenantId, dashboardId.getId());
|
||||
}
|
||||
|
||||
private final PaginatedRemover<TenantId, DashboardId> tenantDashboardsRemover = new PaginatedRemover<>() {
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user