From 605e9987fbe22e683e4ef18c625fcbb73c648dd3 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Mon, 4 Dec 2023 12:14:02 +0200 Subject: [PATCH] Refactor resources validation --- .../server/service/resource/DefaultTbResourceService.java | 6 ++++++ .../org/thingsboard/server/dao/resource/TbResourceDao.java | 2 ++ .../org/thingsboard/server/dao/service/DataValidator.java | 2 +- .../dao/service/validator/ResourceDataValidator.java | 7 ++++++- .../server/dao/sql/resource/JpaTbResourceDao.java | 5 +++++ .../server/dao/sql/resource/TbResourceRepository.java | 3 +++ 6 files changed, 23 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/resource/DefaultTbResourceService.java b/application/src/main/java/org/thingsboard/server/service/resource/DefaultTbResourceService.java index 2cdbd8d7e2..2705092b04 100644 --- a/application/src/main/java/org/thingsboard/server/service/resource/DefaultTbResourceService.java +++ b/application/src/main/java/org/thingsboard/server/service/resource/DefaultTbResourceService.java @@ -53,6 +53,9 @@ public class DefaultTbResourceService extends AbstractTbEntityService implements @Override public TbResource save(TbResource resource, User user) throws ThingsboardException { + if (resource.getResourceType() == ResourceType.IMAGE) { + throw new IllegalArgumentException("Image resource type is not supported"); + } ActionType actionType = resource.getId() == null ? ActionType.ADDED : ActionType.UPDATED; TenantId tenantId = resource.getTenantId(); try { @@ -74,6 +77,9 @@ public class DefaultTbResourceService extends AbstractTbEntityService implements @Override public void delete(TbResource tbResource, User user) { + if (tbResource.getResourceType() == ResourceType.IMAGE) { + throw new IllegalArgumentException("Image resource type is not supported"); + } TbResourceId resourceId = tbResource.getId(); TenantId tenantId = tbResource.getTenantId(); try { diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceDao.java b/dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceDao.java index 8d0ce7fb35..0a8e215618 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/TbResourceDao.java @@ -46,4 +46,6 @@ public interface TbResourceDao extends Dao, TenantEntityWithDataDao, byte[] getResourcePreview(TenantId tenantId, TbResourceId resourceId); + long getResourceSize(TenantId tenantId, TbResourceId resourceId); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java b/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java index 3b514f9fda..961fffcdc0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java +++ b/dao/src/main/java/org/thingsboard/server/dao/service/DataValidator.java @@ -161,7 +161,7 @@ public abstract class DataValidator> { } static void validateQueueNameOrTopic(String value, String fieldName) { - if (StringUtils.isEmpty(value) || value.trim().length() == 0 ) { + if (StringUtils.isEmpty(value) || value.trim().length() == 0) { throw new DataValidationException(String.format("Queue %s should be specified!", fieldName)); } if (!QUEUE_PATTERN.matcher(value).matches()) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/validator/ResourceDataValidator.java b/dao/src/main/java/org/thingsboard/server/dao/service/validator/ResourceDataValidator.java index 37e3f3cb84..26d8ab75fb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/service/validator/ResourceDataValidator.java +++ b/dao/src/main/java/org/thingsboard/server/dao/service/validator/ResourceDataValidator.java @@ -90,7 +90,12 @@ public class ResourceDataValidator extends DataValidator { throw new IllegalArgumentException("Resource exceeds the maximum size of " + maxResourceSize + " bytes"); } long maxSumResourcesDataInBytes = profileConfiguration.getMaxResourcesInBytes(); - validateMaxSumDataSizePerTenant(tenantId, resourceDao, maxSumResourcesDataInBytes, resource.getData().length, TB_RESOURCE); + int dataSize = resource.getData().length; + if (resource.getId() != null) { + long prevSize = resourceDao.getResourceSize(tenantId, resource.getId()); + dataSize -= prevSize; + } + validateMaxSumDataSizePerTenant(tenantId, resourceDao, maxSumResourcesDataInBytes, dataSize, TB_RESOURCE); } if (StringUtils.isEmpty(resource.getFileName())) { throw new DataValidationException("Resource file name should be specified!"); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/resource/JpaTbResourceDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/resource/JpaTbResourceDao.java index 370b21a90e..2326d2ffe4 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/resource/JpaTbResourceDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/resource/JpaTbResourceDao.java @@ -104,6 +104,11 @@ public class JpaTbResourceDao extends JpaAbstractDao