diff --git a/application/src/main/java/org/thingsboard/server/controller/SystemInfoController.java b/application/src/main/java/org/thingsboard/server/controller/SystemInfoController.java index 9ecb9dfcc9..29f4daa783 100644 --- a/application/src/main/java/org/thingsboard/server/controller/SystemInfoController.java +++ b/application/src/main/java/org/thingsboard/server/controller/SystemInfoController.java @@ -162,11 +162,11 @@ public class SystemInfoController extends BaseController { } systemParams.setMaxArgumentsPerCF(tenantProfileConfiguration.getMaxArgumentsPerCF()); systemParams.setMaxDataPointsPerRollingArg(tenantProfileConfiguration.getMaxDataPointsPerRollingArg()); + systemParams.setTrendzSettings(trendzSettingsService.findTrendzSettings(currentUser.getTenantId())); } systemParams.setMobileQrEnabled(Optional.ofNullable(qrCodeSettingService.findQrCodeSettings(TenantId.SYS_TENANT_ID)) .map(QrCodeSettings::getQrCodeConfig).map(QRCodeConfig::isShowOnHomePage) .orElse(false)); - systemParams.setTrendzSettings(trendzSettingsService.findTrendzSettings(currentUser.getTenantId())); return systemParams; } diff --git a/application/src/main/java/org/thingsboard/server/controller/TrendzController.java b/application/src/main/java/org/thingsboard/server/controller/TrendzController.java index 4430f740c7..8261071670 100644 --- a/application/src/main/java/org/thingsboard/server/controller/TrendzController.java +++ b/application/src/main/java/org/thingsboard/server/controller/TrendzController.java @@ -36,7 +36,8 @@ import org.thingsboard.server.service.security.permission.Resource; import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_END; import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_START; import static org.thingsboard.server.controller.ControllerConstants.NEW_LINE; -import static org.thingsboard.server.controller.ControllerConstants.SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH; +import static org.thingsboard.server.controller.ControllerConstants.TENANT_AUTHORITY_PARAGRAPH; +import static org.thingsboard.server.controller.ControllerConstants.TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH; @RestController @TbCoreComponent @@ -47,33 +48,32 @@ public class TrendzController extends BaseController { private final TrendzSettingsService trendzSettingsService; @ApiOperation(value = "Save Trendz settings (saveTrendzSettings)", - notes = "Saves Trendz settings for this tenant or sysadmin.\n" + NEW_LINE + + notes = "Saves Trendz settings for this tenant.\n" + NEW_LINE + "Here is an example of the Trendz settings:\n" + MARKDOWN_CODE_BLOCK_START + "{\n" + " \"enabled\": true,\n" + - " \"trendzUrl\": \"https://some.domain.com:18888/also_necessary_prefix\"\n" + + " \"baseUrl\": \"https://some.domain.com:18888/also_necessary_prefix\"\n" + "}" + MARKDOWN_CODE_BLOCK_END + - SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH) + TENANT_AUTHORITY_PARAGRAPH) @PostMapping("/trendz/settings") - @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") public TrendzSettings saveTrendzSettings(@RequestBody TrendzSettings trendzSettings, @AuthenticationPrincipal SecurityUser user) throws ThingsboardException { - accessControlService.checkPermission(user, Resource.TRENDZ_SETTINGS, Operation.WRITE); - TenantId tenantId = user.isSystemAdmin() ? TenantId.SYS_TENANT_ID : user.getTenantId(); + accessControlService.checkPermission(user, Resource.ADMIN_SETTINGS, Operation.WRITE); + TenantId tenantId = user.getTenantId(); trendzSettingsService.saveTrendzSettings(tenantId, trendzSettings); return trendzSettings; } @ApiOperation(value = "Get Trendz Settings (getTrendzSettings)", - notes = "Retrieves trendz settings for this tenant or sysadmin." + - SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH) + notes = "Retrieves Trendz settings for this tenant." + + TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH) @GetMapping("/trendz/settings") - @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") - public TrendzSettings getTrendzSettings(@AuthenticationPrincipal SecurityUser user) throws ThingsboardException { - accessControlService.checkPermission(user, Resource.TRENDZ_SETTINGS, Operation.READ); - TenantId tenantId = user.isSystemAdmin() ? TenantId.SYS_TENANT_ID : user.getTenantId(); + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") + public TrendzSettings getTrendzSettings(@AuthenticationPrincipal SecurityUser user) { + TenantId tenantId = user.getTenantId(); return trendzSettingsService.findTrendzSettings(tenantId); } diff --git a/application/src/main/java/org/thingsboard/server/service/security/permission/CustomerUserPermissions.java b/application/src/main/java/org/thingsboard/server/service/security/permission/CustomerUserPermissions.java index ea7457ec47..8124671cd7 100644 --- a/application/src/main/java/org/thingsboard/server/service/security/permission/CustomerUserPermissions.java +++ b/application/src/main/java/org/thingsboard/server/service/security/permission/CustomerUserPermissions.java @@ -48,7 +48,6 @@ public class CustomerUserPermissions extends AbstractPermissions { put(Resource.ASSET_PROFILE, profilePermissionChecker); put(Resource.TB_RESOURCE, customerResourcePermissionChecker); put(Resource.MOBILE_APP_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ)); - put(Resource.TRENDZ_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ)); } private static final PermissionChecker customerAlarmPermissionChecker = new PermissionChecker() { diff --git a/application/src/main/java/org/thingsboard/server/service/security/permission/Resource.java b/application/src/main/java/org/thingsboard/server/service/security/permission/Resource.java index 1added11b0..9d7590f786 100644 --- a/application/src/main/java/org/thingsboard/server/service/security/permission/Resource.java +++ b/application/src/main/java/org/thingsboard/server/service/security/permission/Resource.java @@ -51,8 +51,7 @@ public enum Resource { NOTIFICATION(EntityType.NOTIFICATION_TARGET, EntityType.NOTIFICATION_TEMPLATE, EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE), MOBILE_APP_SETTINGS, - CALCULATED_FIELD(EntityType.CALCULATED_FIELD), - TRENDZ_SETTINGS; + CALCULATED_FIELD(EntityType.CALCULATED_FIELD); private final Set entityTypes; diff --git a/application/src/main/java/org/thingsboard/server/service/security/permission/SysAdminPermissions.java b/application/src/main/java/org/thingsboard/server/service/security/permission/SysAdminPermissions.java index acfec9da25..6bd7aacf54 100644 --- a/application/src/main/java/org/thingsboard/server/service/security/permission/SysAdminPermissions.java +++ b/application/src/main/java/org/thingsboard/server/service/security/permission/SysAdminPermissions.java @@ -45,7 +45,6 @@ public class SysAdminPermissions extends AbstractPermissions { put(Resource.QUEUE, systemEntityPermissionChecker); put(Resource.NOTIFICATION, systemEntityPermissionChecker); put(Resource.MOBILE_APP_SETTINGS, PermissionChecker.allowAllPermissionChecker); - put(Resource.TRENDZ_SETTINGS, PermissionChecker.allowAllPermissionChecker); } private static final PermissionChecker systemEntityPermissionChecker = new PermissionChecker() { diff --git a/application/src/main/java/org/thingsboard/server/service/security/permission/TenantAdminPermissions.java b/application/src/main/java/org/thingsboard/server/service/security/permission/TenantAdminPermissions.java index 35824d7858..a072cf2738 100644 --- a/application/src/main/java/org/thingsboard/server/service/security/permission/TenantAdminPermissions.java +++ b/application/src/main/java/org/thingsboard/server/service/security/permission/TenantAdminPermissions.java @@ -56,7 +56,6 @@ public class TenantAdminPermissions extends AbstractPermissions { put(Resource.MOBILE_APP, tenantEntityPermissionChecker); put(Resource.MOBILE_APP_BUNDLE, tenantEntityPermissionChecker); put(Resource.CALCULATED_FIELD, tenantEntityPermissionChecker); - put(Resource.TRENDZ_SETTINGS, PermissionChecker.allowAllPermissionChecker); } public static final PermissionChecker tenantEntityPermissionChecker = new PermissionChecker() { diff --git a/application/src/test/java/org/thingsboard/server/controller/TrendzControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/TrendzControllerTest.java index e36861924c..115b895521 100644 --- a/application/src/test/java/org/thingsboard/server/controller/TrendzControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/TrendzControllerTest.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.controller; +import org.junit.Before; import org.junit.Test; import org.thingsboard.server.common.data.trendz.TrendzSettings; import org.thingsboard.server.dao.service.DaoSqlTest; @@ -27,6 +28,17 @@ public class TrendzControllerTest extends AbstractControllerTest { private final String trendzUrl = "https://some.domain.com:18888/also_necessary_prefix"; + @Before + public void setUp() throws Exception { + loginTenantAdmin(); + + TrendzSettings trendzSettings = new TrendzSettings(); + trendzSettings.setEnabled(true); + trendzSettings.setBaseUrl(trendzUrl); + + doPost("/api/trendz/settings", trendzSettings).andExpect(status().isOk()); + } + @Test public void testTrendzSettingsWhenTenant() throws Exception { loginTenantAdmin(); @@ -34,11 +46,11 @@ public class TrendzControllerTest extends AbstractControllerTest { TrendzSettings trendzSettings = doGet("/api/trendz/settings", TrendzSettings.class); assertThat(trendzSettings).isNotNull(); - assertThat(trendzSettings.isEnabled()).isFalse(); - assertThat(trendzSettings.getTrendzUrl()).isNull(); + assertThat(trendzSettings.isEnabled()).isTrue(); + assertThat(trendzSettings.getBaseUrl()).isEqualTo(trendzUrl); - trendzSettings.setEnabled(true); - trendzSettings.setTrendzUrl(trendzUrl); + String updatedUrl = "https://some.domain.com:18888/tenant_trendz"; + trendzSettings.setBaseUrl(updatedUrl); doPost("/api/trendz/settings", trendzSettings).andExpect(status().isOk()); @@ -50,14 +62,16 @@ public class TrendzControllerTest extends AbstractControllerTest { public void testTrendzSettingsWhenCustomer() throws Exception { loginCustomerUser(); - TrendzSettings trendzSettings = new TrendzSettings(); - trendzSettings.setEnabled(true); - trendzSettings.setTrendzUrl("https://some.domain.com:18888/customer_trendz"); + TrendzSettings newTrendzSettings = new TrendzSettings(); + newTrendzSettings.setEnabled(true); + newTrendzSettings.setBaseUrl("https://some.domain.com:18888/customer_trendz"); - doPost("/api/trendz/settings", trendzSettings).andExpect(status().isForbidden()); + doPost("/api/trendz/settings", newTrendzSettings).andExpect(status().isForbidden()); TrendzSettings fetchedTrendzSettings = doGet("/api/trendz/settings", TrendzSettings.class); assertThat(fetchedTrendzSettings).isNotNull(); + assertThat(fetchedTrendzSettings.isEnabled()).isTrue(); + assertThat(fetchedTrendzSettings.getBaseUrl()).isEqualTo(trendzUrl); } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/trendz/TrendzSettings.java b/common/data/src/main/java/org/thingsboard/server/common/data/trendz/TrendzSettings.java index dfd1967740..3c3b49399c 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/trendz/TrendzSettings.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/trendz/TrendzSettings.java @@ -21,6 +21,6 @@ import lombok.Data; public class TrendzSettings { private boolean enabled; - private String trendzUrl; + private String baseUrl; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java index e35c9269b3..8c40ca3e14 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java @@ -166,10 +166,10 @@ public class TenantServiceImpl extends AbstractCachedEntityService INCORRECT_TENANT_ID + id); userService.deleteAllByTenantId(tenantId); - adminSettingsService.deleteAdminSettingsByTenantId(tenantId); - qrCodeSettingService.deleteByTenantId(tenantId); notificationSettingsService.deleteNotificationSettings(tenantId); trendzSettingsService.deleteTrendzSettings(tenantId); + adminSettingsService.deleteAdminSettingsByTenantId(tenantId); + qrCodeSettingService.deleteByTenantId(tenantId); tenantDao.removeById(tenantId, tenantId.getId()); publishEvictEvent(new TenantEvictEvent(tenantId, true));