Add maxResourceSize to SystemParams

This commit is contained in:
ViacheslavKlimov 2023-12-22 12:38:56 +02:00
parent d788b00a69
commit 58cf97f68a
4 changed files with 13 additions and 33 deletions

View File

@ -16,8 +16,6 @@
package org.thingsboard.server.controller; package org.thingsboard.server.controller;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Builder;
import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -51,7 +49,6 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileConfiguration;
import org.thingsboard.server.common.data.util.ThrowingSupplier; import org.thingsboard.server.common.data.util.ThrowingSupplier;
import org.thingsboard.server.dao.resource.ImageCacheKey; import org.thingsboard.server.dao.resource.ImageCacheKey;
import org.thingsboard.server.dao.resource.ImageService; import org.thingsboard.server.dao.resource.ImageService;
@ -284,19 +281,6 @@ public class ImageController extends BaseController {
return (result.isSuccess() ? ResponseEntity.ok() : ResponseEntity.badRequest()).body(result); return (result.isSuccess() ? ResponseEntity.ok() : ResponseEntity.badRequest()).body(result);
} }
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@GetMapping("/api/image/specs")
public ImageSpecs getImageUploadSpecs() throws ThingsboardException {
SecurityUser user = getCurrentUser();
if (user.isSystemAdmin()) {
return ImageSpecs.DEFAULT;
}
DefaultTenantProfileConfiguration tenantProfileConfig = tenantProfileCache.get(user.getTenantId()).getDefaultProfileConfiguration();
return ImageSpecs.builder()
.maximumSize(tenantProfileConfig.getMaxResourceSize())
.build();
}
private ResponseEntity<ByteArrayResource> downloadIfChanged(String type, String key, String etag, boolean preview) throws Exception { private ResponseEntity<ByteArrayResource> downloadIfChanged(String type, String key, String etag, boolean preview) throws Exception {
ImageCacheKey cacheKey = ImageCacheKey.forImage(getTenantId(type), key, preview); ImageCacheKey cacheKey = ImageCacheKey.forImage(getTenantId(type), key, preview);
return downloadIfChanged(cacheKey, etag, () -> checkImageInfo(type, key, Operation.READ)); return downloadIfChanged(cacheKey, etag, () -> checkImageInfo(type, key, Operation.READ));
@ -359,14 +343,4 @@ public class ImageController extends BaseController {
return tenantId; return tenantId;
} }
@Data
@Builder
public static class ImageSpecs {
private final long maximumSize;
public static final ImageSpecs DEFAULT = ImageSpecs.builder()
.maximumSize(0)
.build();
}
} }

View File

@ -35,6 +35,7 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.settings.UserSettings; import org.thingsboard.server.common.data.settings.UserSettings;
import org.thingsboard.server.common.data.settings.UserSettingsType; import org.thingsboard.server.common.data.settings.UserSettingsType;
import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileConfiguration;
import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.security.model.SecurityUser; import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.security.model.UserPrincipal; import org.thingsboard.server.service.security.model.UserPrincipal;
@ -130,6 +131,10 @@ public class SystemInfoController extends BaseController {
} }
systemParams.setUserSettings(userSettingsNode); systemParams.setUserSettings(userSettingsNode);
systemParams.setMaxDatapointsLimit(maxDatapointsLimit); systemParams.setMaxDatapointsLimit(maxDatapointsLimit);
if (!currentUser.isSystemAdmin()) {
DefaultTenantProfileConfiguration tenantProfileConfiguration = tenantProfileCache.get(tenantId).getDefaultProfileConfiguration();
systemParams.setMaxResourceSize(tenantProfileConfiguration.getMaxResourceSize());
}
return systemParams; return systemParams;
} }

View File

@ -30,10 +30,10 @@ import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.ImageDescriptor; import org.thingsboard.server.common.data.ImageDescriptor;
import org.thingsboard.server.common.data.ImageExportData; import org.thingsboard.server.common.data.ImageExportData;
import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.SystemParams;
import org.thingsboard.server.common.data.TbResourceInfo; import org.thingsboard.server.common.data.TbResourceInfo;
import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.controller.ImageController.ImageSpecs;
import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.DaoSqlTest;
import org.thingsboard.server.dao.sql.resource.TbResourceRepository; import org.thingsboard.server.dao.sql.resource.TbResourceRepository;
@ -243,24 +243,24 @@ public class ImageControllerTest extends AbstractControllerTest {
@Test @Test
public void testGetImageUploadSpecs() throws Exception { public void testGetImageUploadSpecs() throws Exception {
ImageSpecs specs = doGet("/api/image/specs", ImageSpecs.class); SystemParams systemParams = doGet("/api/system/params", SystemParams.class);
assertThat(specs.getMaximumSize()).isZero(); assertThat(systemParams.getMaxResourceSize()).isZero();
loginSysAdmin(); loginSysAdmin();
updateDefaultTenantProfileConfig(tenantProfileConfig -> { updateDefaultTenantProfileConfig(tenantProfileConfig -> {
tenantProfileConfig.setMaxResourceSize(100); tenantProfileConfig.setMaxResourceSize(100);
}); });
loginTenantAdmin(); loginTenantAdmin();
specs = doGet("/api/image/specs", ImageSpecs.class); systemParams = doGet("/api/system/params", SystemParams.class);
assertThat(specs.getMaximumSize()).isEqualTo(100); assertThat(systemParams.getMaxResourceSize()).isEqualTo(100);
loginSysAdmin(); loginSysAdmin();
updateDefaultTenantProfileConfig(tenantProfileConfig -> { updateDefaultTenantProfileConfig(tenantProfileConfig -> {
tenantProfileConfig.setMaxResourceSize(0); tenantProfileConfig.setMaxResourceSize(0);
}); });
loginTenantAdmin(); loginTenantAdmin();
specs = doGet("/api/image/specs", ImageSpecs.class); systemParams = doGet("/api/system/params", SystemParams.class);
assertThat(specs.getMaximumSize()).isEqualTo(0); assertThat(systemParams.getMaxResourceSize()).isEqualTo(0);
} }
private TbResourceInfo updateImagePublicStatus(String filename, boolean isPublic) throws Exception { private TbResourceInfo updateImagePublicStatus(String filename, boolean isPublic) throws Exception {

View File

@ -30,4 +30,5 @@ public class SystemParams {
boolean persistDeviceStateToTelemetry; boolean persistDeviceStateToTelemetry;
JsonNode userSettings; JsonNode userSettings;
long maxDatapointsLimit; long maxDatapointsLimit;
long maxResourceSize;
} }