pull request comments
This commit is contained in:
parent
fb87cd6df7
commit
879e8f46a5
@ -15,7 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.controller;
|
package org.thingsboard.server.controller;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -28,20 +31,35 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.thingsboard.common.util.JacksonUtil;
|
||||||
|
import org.thingsboard.server.common.data.HomeDashboardInfo;
|
||||||
|
import org.thingsboard.server.common.data.User;
|
||||||
|
import org.thingsboard.server.common.data.Views;
|
||||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
||||||
import org.thingsboard.server.common.data.id.MobileAppId;
|
import org.thingsboard.server.common.data.id.MobileAppId;
|
||||||
|
import org.thingsboard.server.common.data.mobile.LoginMobileInfo;
|
||||||
|
import org.thingsboard.server.common.data.mobile.UserMobileInfo;
|
||||||
import org.thingsboard.server.common.data.mobile.app.MobileApp;
|
import org.thingsboard.server.common.data.mobile.app.MobileApp;
|
||||||
|
import org.thingsboard.server.common.data.mobile.app.MobileAppVersionInfo;
|
||||||
|
import org.thingsboard.server.common.data.mobile.bundle.MobileAppBundle;
|
||||||
|
import org.thingsboard.server.common.data.mobile.layout.MobilePage;
|
||||||
|
import org.thingsboard.server.common.data.oauth2.OAuth2ClientLoginInfo;
|
||||||
import org.thingsboard.server.common.data.oauth2.PlatformType;
|
import org.thingsboard.server.common.data.oauth2.PlatformType;
|
||||||
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.config.annotations.ApiOperation;
|
import org.thingsboard.server.config.annotations.ApiOperation;
|
||||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||||
import org.thingsboard.server.service.entitiy.mobile.TbMobileAppService;
|
import org.thingsboard.server.service.entitiy.mobile.TbMobileAppService;
|
||||||
|
import org.thingsboard.server.service.security.model.SecurityUser;
|
||||||
import org.thingsboard.server.service.security.permission.Operation;
|
import org.thingsboard.server.service.security.permission.Operation;
|
||||||
import org.thingsboard.server.service.security.permission.Resource;
|
import org.thingsboard.server.service.security.permission.Resource;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static org.thingsboard.server.controller.ControllerConstants.AVAILABLE_FOR_ANY_AUTHORIZED_USER;
|
||||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_NUMBER_DESCRIPTION;
|
import static org.thingsboard.server.controller.ControllerConstants.PAGE_NUMBER_DESCRIPTION;
|
||||||
import static org.thingsboard.server.controller.ControllerConstants.PAGE_SIZE_DESCRIPTION;
|
import static org.thingsboard.server.controller.ControllerConstants.PAGE_SIZE_DESCRIPTION;
|
||||||
import static org.thingsboard.server.controller.ControllerConstants.SORT_ORDER_DESCRIPTION;
|
import static org.thingsboard.server.controller.ControllerConstants.SORT_ORDER_DESCRIPTION;
|
||||||
@ -58,6 +76,41 @@ public class MobileAppController extends BaseController {
|
|||||||
|
|
||||||
private final TbMobileAppService tbMobileAppService;
|
private final TbMobileAppService tbMobileAppService;
|
||||||
|
|
||||||
|
@ApiOperation(value = "Get mobile app login info (getLoginMobileInfo)")
|
||||||
|
@GetMapping(value = "/api/noauth/mobile")
|
||||||
|
public LoginMobileInfo getLoginMobileInfo(@Parameter(description = "Mobile application package name")
|
||||||
|
@RequestParam String pkgName,
|
||||||
|
@Parameter(description = "Platform type", schema = @Schema(allowableValues = {"ANDROID", "IOS"}))
|
||||||
|
@RequestParam PlatformType platform) {
|
||||||
|
List<OAuth2ClientLoginInfo> oauth2Clients = oAuth2ClientService.findOAuth2ClientLoginInfosByMobilePkgNameAndPlatformType(pkgName, platform);
|
||||||
|
MobileApp mobileApp = mobileAppService.findMobileAppByPkgNameAndPlatformType(pkgName, platform);
|
||||||
|
return new LoginMobileInfo(oauth2Clients, mobileApp != null ? mobileApp.getVersionInfo() : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "Get user mobile app basic info (getUserMobileInfo)", notes = AVAILABLE_FOR_ANY_AUTHORIZED_USER)
|
||||||
|
@PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN', 'CUSTOMER_USER')")
|
||||||
|
@GetMapping(value = "/api/mobile")
|
||||||
|
public UserMobileInfo getUserMobileInfo(@Parameter(description = "Mobile application package name")
|
||||||
|
@RequestParam String pkgName,
|
||||||
|
@Parameter(description = "Platform type", schema = @Schema(allowableValues = {"ANDROID", "IOS"}))
|
||||||
|
@RequestParam PlatformType platform) throws ThingsboardException, JsonProcessingException {
|
||||||
|
SecurityUser securityUser = getCurrentUser();
|
||||||
|
User user = userService.findUserById(securityUser.getTenantId(), securityUser.getId());
|
||||||
|
HomeDashboardInfo homeDashboardInfo = securityUser.isSystemAdmin() ? null : getHomeDashboardInfo(securityUser, user.getAdditionalInfo());
|
||||||
|
MobileAppBundle mobileAppBundle = mobileAppBundleService.findMobileAppBundleByPkgNameAndPlatform(securityUser.getTenantId(), pkgName, platform);
|
||||||
|
return new UserMobileInfo(user, homeDashboardInfo, getVisiblePages(mobileAppBundle));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "Get mobile app version info (getMobileVersionInfo)")
|
||||||
|
@GetMapping(value = "/api/mobile/versionInfo")
|
||||||
|
public MobileAppVersionInfo getMobileVersionInfo(@Parameter(description = "Mobile application package name")
|
||||||
|
@RequestParam String pkgName,
|
||||||
|
@Parameter(description = "Platform type", schema = @Schema(allowableValues = {"ANDROID", "IOS"}))
|
||||||
|
@RequestParam PlatformType platform) {
|
||||||
|
MobileApp mobileApp = mobileAppService.findMobileAppByPkgNameAndPlatformType(pkgName, platform);
|
||||||
|
return mobileApp != null ? mobileApp.getVersionInfo() : null;
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "Save Or update Mobile app (saveMobileApp)",
|
@ApiOperation(value = "Save Or update Mobile app (saveMobileApp)",
|
||||||
notes = "Create or update the Mobile app. When creating mobile app, platform generates Mobile App Id as " + UUID_WIKI_LINK +
|
notes = "Create or update the Mobile app. When creating mobile app, platform generates Mobile App Id as " + UUID_WIKI_LINK +
|
||||||
"The newly created Mobile App Id will be present in the response. " +
|
"The newly created Mobile App Id will be present in the response. " +
|
||||||
@ -111,4 +164,16 @@ public class MobileAppController extends BaseController {
|
|||||||
tbMobileAppService.delete(mobileApp, getCurrentUser());
|
tbMobileAppService.delete(mobileApp, getCurrentUser());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<MobilePage> getVisiblePages(MobileAppBundle mobileAppBundle) throws JsonProcessingException {
|
||||||
|
if (mobileAppBundle != null && mobileAppBundle.getLayoutConfig() != null) {
|
||||||
|
List<MobilePage> mobilePages = mobileAppBundle.getLayoutConfig().getPages()
|
||||||
|
.stream()
|
||||||
|
.filter(MobilePage::isVisible)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return JacksonUtil.readValue(JacksonUtil.writeValueAsViewIgnoringNullFields(mobilePages, Views.Public.class), new TypeReference<>() {});
|
||||||
|
} else {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,102 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright © 2016-2024 The Thingsboard Authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.thingsboard.server.controller;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import org.thingsboard.common.util.JacksonUtil;
|
|
||||||
import org.thingsboard.server.common.data.HomeDashboardInfo;
|
|
||||||
import org.thingsboard.server.common.data.User;
|
|
||||||
import org.thingsboard.server.common.data.Views;
|
|
||||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
|
||||||
import org.thingsboard.server.common.data.mobile.LoginMobileInfo;
|
|
||||||
import org.thingsboard.server.common.data.mobile.app.MobileApp;
|
|
||||||
import org.thingsboard.server.common.data.mobile.bundle.MobileAppBundle;
|
|
||||||
import org.thingsboard.server.common.data.mobile.app.MobileAppVersionInfo;
|
|
||||||
import org.thingsboard.server.common.data.mobile.UserMobileInfo;
|
|
||||||
import org.thingsboard.server.common.data.mobile.layout.MobilePage;
|
|
||||||
import org.thingsboard.server.common.data.oauth2.OAuth2ClientLoginInfo;
|
|
||||||
import org.thingsboard.server.common.data.oauth2.PlatformType;
|
|
||||||
import org.thingsboard.server.config.annotations.ApiOperation;
|
|
||||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
|
||||||
import org.thingsboard.server.service.security.model.SecurityUser;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static org.thingsboard.server.controller.ControllerConstants.AVAILABLE_FOR_ANY_AUTHORIZED_USER;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@RestController
|
|
||||||
@TbCoreComponent
|
|
||||||
public class MobileV2Controller extends BaseController {
|
|
||||||
|
|
||||||
@ApiOperation(value = "Get mobile app login info (getLoginMobileInfo)")
|
|
||||||
@GetMapping(value = "/api/noauth/mobile")
|
|
||||||
public LoginMobileInfo getLoginMobileInfo(@Parameter(description = "Mobile application package name")
|
|
||||||
@RequestParam String pkgName,
|
|
||||||
@Parameter(description = "Platform type", schema = @Schema(allowableValues = {"ANDROID", "IOS"}))
|
|
||||||
@RequestParam PlatformType platform) {
|
|
||||||
List<OAuth2ClientLoginInfo> oauth2Clients = oAuth2ClientService.findOAuth2ClientLoginInfosByMobilePkgNameAndPlatformType(pkgName, platform);
|
|
||||||
MobileApp mobileApp = mobileAppService.findMobileAppByPkgNameAndPlatformType(pkgName, platform);
|
|
||||||
return new LoginMobileInfo(oauth2Clients, mobileApp != null ? mobileApp.getVersionInfo() : null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ApiOperation(value = "Get user mobile app basic info (getUserMobileInfo)", notes = AVAILABLE_FOR_ANY_AUTHORIZED_USER)
|
|
||||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN', 'CUSTOMER_USER')")
|
|
||||||
@GetMapping(value = "/api/mobile")
|
|
||||||
public UserMobileInfo getUserMobileInfo(@Parameter(description = "Mobile application package name")
|
|
||||||
@RequestParam String pkgName,
|
|
||||||
@Parameter(description = "Platform type", schema = @Schema(allowableValues = {"ANDROID", "IOS"}))
|
|
||||||
@RequestParam PlatformType platform) throws ThingsboardException, JsonProcessingException {
|
|
||||||
SecurityUser securityUser = getCurrentUser();
|
|
||||||
User user = userService.findUserById(securityUser.getTenantId(), securityUser.getId());
|
|
||||||
HomeDashboardInfo homeDashboardInfo = securityUser.isSystemAdmin() ? null : getHomeDashboardInfo(securityUser, user.getAdditionalInfo());
|
|
||||||
MobileAppBundle mobileAppBundle = mobileAppBundleService.findMobileAppBundleByPkgNameAndPlatform(securityUser.getTenantId(), pkgName, platform);
|
|
||||||
return new UserMobileInfo(user, homeDashboardInfo, getVisiblePages(mobileAppBundle));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ApiOperation(value = "Get mobile app version info (getMobileVersionInfo)")
|
|
||||||
@GetMapping(value = "/api/mobile/versionInfo")
|
|
||||||
public MobileAppVersionInfo getMobileVersionInfo(@Parameter(description = "Mobile application package name")
|
|
||||||
@RequestParam String pkgName,
|
|
||||||
@Parameter(description = "Platform type", schema = @Schema(allowableValues = {"ANDROID", "IOS"}))
|
|
||||||
@RequestParam PlatformType platform) {
|
|
||||||
MobileApp mobileApp = mobileAppService.findMobileAppByPkgNameAndPlatformType(pkgName, platform);
|
|
||||||
return mobileApp != null ? mobileApp.getVersionInfo() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<MobilePage> getVisiblePages(MobileAppBundle mobileAppBundle) throws JsonProcessingException {
|
|
||||||
if (mobileAppBundle != null && mobileAppBundle.getLayoutConfig() != null) {
|
|
||||||
List<MobilePage> mobilePages = mobileAppBundle.getLayoutConfig().getPages()
|
|
||||||
.stream()
|
|
||||||
.filter(MobilePage::isVisible)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
return JacksonUtil.readValue(JacksonUtil.writeValueAsViewIgnoringNullFields(mobilePages, Views.Public.class), new TypeReference<>() {});
|
|
||||||
} else {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -126,9 +126,9 @@ public class QrCodeSettingsController extends BaseController {
|
|||||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
|
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
|
||||||
@PostMapping(value = "/api/mobile/qr/settings")
|
@PostMapping(value = "/api/mobile/qr/settings")
|
||||||
public QrCodeSettings saveQrCodeSettings(@Parameter(description = "A JSON value representing the mobile apps configuration")
|
public QrCodeSettings saveQrCodeSettings(@Parameter(description = "A JSON value representing the mobile apps configuration")
|
||||||
@RequestBody QrCodeSettings qrCodeSettings) throws ThingsboardException {
|
@RequestBody QrCodeSettings qrCodeSettings) throws ThingsboardException {
|
||||||
SecurityUser currentUser = getCurrentUser();
|
SecurityUser currentUser = getCurrentUser();
|
||||||
accessControlService.checkPermission(currentUser, Resource.QR_CODE_SETTINGS, Operation.WRITE);
|
accessControlService.checkPermission(currentUser, Resource.MOBILE_APP_SETTINGS, Operation.WRITE);
|
||||||
qrCodeSettings.setTenantId(getTenantId());
|
qrCodeSettings.setTenantId(getTenantId());
|
||||||
return qrCodeSettingService.saveQrCodeSettings(currentUser.getTenantId(), qrCodeSettings);
|
return qrCodeSettingService.saveQrCodeSettings(currentUser.getTenantId(), qrCodeSettings);
|
||||||
}
|
}
|
||||||
@ -137,9 +137,9 @@ public class QrCodeSettingsController extends BaseController {
|
|||||||
notes = "The response payload contains configuration for android/iOS applications and platform qr code widget settings." + AVAILABLE_FOR_ANY_AUTHORIZED_USER)
|
notes = "The response payload contains configuration for android/iOS applications and platform qr code widget settings." + AVAILABLE_FOR_ANY_AUTHORIZED_USER)
|
||||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
|
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
|
||||||
@GetMapping(value = "/api/mobile/qr/settings")
|
@GetMapping(value = "/api/mobile/qr/settings")
|
||||||
public QrCodeSettings getQrAppSettings() throws ThingsboardException {
|
public QrCodeSettings getQrCodeSettings() throws ThingsboardException {
|
||||||
SecurityUser currentUser = getCurrentUser();
|
SecurityUser currentUser = getCurrentUser();
|
||||||
accessControlService.checkPermission(currentUser, Resource.QR_CODE_SETTINGS, Operation.READ);
|
accessControlService.checkPermission(currentUser, Resource.MOBILE_APP_SETTINGS, Operation.READ);
|
||||||
return qrCodeSettingService.findQrCodeSettings(TenantId.SYS_TENANT_ID);
|
return qrCodeSettingService.findQrCodeSettings(TenantId.SYS_TENANT_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@ public class CustomerUserPermissions extends AbstractPermissions {
|
|||||||
put(Resource.DEVICE_PROFILE, profilePermissionChecker);
|
put(Resource.DEVICE_PROFILE, profilePermissionChecker);
|
||||||
put(Resource.ASSET_PROFILE, profilePermissionChecker);
|
put(Resource.ASSET_PROFILE, profilePermissionChecker);
|
||||||
put(Resource.TB_RESOURCE, customerResourcePermissionChecker);
|
put(Resource.TB_RESOURCE, customerResourcePermissionChecker);
|
||||||
put(Resource.QR_CODE_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ));
|
put(Resource.MOBILE_APP_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final PermissionChecker customerAlarmPermissionChecker = new PermissionChecker() {
|
private static final PermissionChecker customerAlarmPermissionChecker = new PermissionChecker() {
|
||||||
|
|||||||
@ -50,7 +50,7 @@ public enum Resource {
|
|||||||
VERSION_CONTROL,
|
VERSION_CONTROL,
|
||||||
NOTIFICATION(EntityType.NOTIFICATION_TARGET, EntityType.NOTIFICATION_TEMPLATE,
|
NOTIFICATION(EntityType.NOTIFICATION_TARGET, EntityType.NOTIFICATION_TEMPLATE,
|
||||||
EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE),
|
EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE),
|
||||||
QR_CODE_SETTINGS;
|
MOBILE_APP_SETTINGS;
|
||||||
private final Set<EntityType> entityTypes;
|
private final Set<EntityType> entityTypes;
|
||||||
|
|
||||||
Resource() {
|
Resource() {
|
||||||
|
|||||||
@ -44,7 +44,7 @@ public class SysAdminPermissions extends AbstractPermissions {
|
|||||||
put(Resource.TB_RESOURCE, systemEntityPermissionChecker);
|
put(Resource.TB_RESOURCE, systemEntityPermissionChecker);
|
||||||
put(Resource.QUEUE, systemEntityPermissionChecker);
|
put(Resource.QUEUE, systemEntityPermissionChecker);
|
||||||
put(Resource.NOTIFICATION, systemEntityPermissionChecker);
|
put(Resource.NOTIFICATION, systemEntityPermissionChecker);
|
||||||
put(Resource.QR_CODE_SETTINGS, PermissionChecker.allowAllPermissionChecker);
|
put(Resource.MOBILE_APP_SETTINGS, PermissionChecker.allowAllPermissionChecker);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final PermissionChecker systemEntityPermissionChecker = new PermissionChecker() {
|
private static final PermissionChecker systemEntityPermissionChecker = new PermissionChecker() {
|
||||||
|
|||||||
@ -50,7 +50,7 @@ public class TenantAdminPermissions extends AbstractPermissions {
|
|||||||
put(Resource.QUEUE, queuePermissionChecker);
|
put(Resource.QUEUE, queuePermissionChecker);
|
||||||
put(Resource.VERSION_CONTROL, PermissionChecker.allowAllPermissionChecker);
|
put(Resource.VERSION_CONTROL, PermissionChecker.allowAllPermissionChecker);
|
||||||
put(Resource.NOTIFICATION, tenantEntityPermissionChecker);
|
put(Resource.NOTIFICATION, tenantEntityPermissionChecker);
|
||||||
put(Resource.QR_CODE_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ));
|
put(Resource.MOBILE_APP_SETTINGS, new PermissionChecker.GenericPermissionChecker(Operation.READ));
|
||||||
put(Resource.MOBILE_APP, tenantEntityPermissionChecker);
|
put(Resource.MOBILE_APP, tenantEntityPermissionChecker);
|
||||||
put(Resource.MOBILE_APP_BUNDLE, tenantEntityPermissionChecker);
|
put(Resource.MOBILE_APP_BUNDLE, tenantEntityPermissionChecker);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -610,7 +610,7 @@ cache:
|
|||||||
timeToLiveInMinutes: "${CACHE_SPECS_ALARM_TYPES_TTL:60}" # Alarm types cache TTL
|
timeToLiveInMinutes: "${CACHE_SPECS_ALARM_TYPES_TTL:60}" # Alarm types cache TTL
|
||||||
maxSize: "${CACHE_SPECS_ALARM_TYPES_MAX_SIZE:10000}" # 0 means the cache is disabled
|
maxSize: "${CACHE_SPECS_ALARM_TYPES_MAX_SIZE:10000}" # 0 means the cache is disabled
|
||||||
qrCodeSettings:
|
qrCodeSettings:
|
||||||
timeToLiveInMinutes: "${CACHE_SPECS_MOBILE_APP_SETTINGS_TTL:1440}" # Mobile application cache TTL
|
timeToLiveInMinutes: "${CACHE_SPECS_MOBILE_APP_SETTINGS_TTL:1440}" # Qr code settings cache TTL
|
||||||
maxSize: "${CACHE_SPECS_MOBILE_APP_SETTINGS_MAX_SIZE:10000}" # 0 means the cache is disabled
|
maxSize: "${CACHE_SPECS_MOBILE_APP_SETTINGS_MAX_SIZE:10000}" # 0 means the cache is disabled
|
||||||
mobileSecretKey:
|
mobileSecretKey:
|
||||||
timeToLiveInMinutes: "${CACHE_MOBILE_SECRET_KEY_TTL:2}" # QR secret key cache TTL
|
timeToLiveInMinutes: "${CACHE_MOBILE_SECRET_KEY_TTL:2}" # QR secret key cache TTL
|
||||||
|
|||||||
@ -76,9 +76,6 @@ public class MobileAppBundleServiceImpl extends AbstractEntityService implements
|
|||||||
@Override
|
@Override
|
||||||
public void deleteMobileAppBundleById(TenantId tenantId, MobileAppBundleId mobileAppBundleId) {
|
public void deleteMobileAppBundleById(TenantId tenantId, MobileAppBundleId mobileAppBundleId) {
|
||||||
log.trace("Executing deleteMobileAppBundleById [{}]", mobileAppBundleId.getId());
|
log.trace("Executing deleteMobileAppBundleById [{}]", mobileAppBundleId.getId());
|
||||||
mobileAppBundleDao.removeById(tenantId, mobileAppBundleId.getId());
|
|
||||||
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(mobileAppBundleId).build());
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mobileAppBundleDao.removeById(tenantId, mobileAppBundleId.getId());
|
mobileAppBundleDao.removeById(tenantId, mobileAppBundleId.getId());
|
||||||
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(mobileAppBundleId).build());
|
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(mobileAppBundleId).build());
|
||||||
|
|||||||
@ -178,7 +178,7 @@ public class TenantServiceImpl extends AbstractCachedEntityService<TenantId, Ten
|
|||||||
EntityType.TB_RESOURCE, EntityType.OTA_PACKAGE, EntityType.RPC, EntityType.QUEUE,
|
EntityType.TB_RESOURCE, EntityType.OTA_PACKAGE, EntityType.RPC, EntityType.QUEUE,
|
||||||
EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE, EntityType.NOTIFICATION_TEMPLATE,
|
EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE, EntityType.NOTIFICATION_TEMPLATE,
|
||||||
EntityType.NOTIFICATION_TARGET, EntityType.QUEUE_STATS, EntityType.CUSTOMER,
|
EntityType.NOTIFICATION_TARGET, EntityType.QUEUE_STATS, EntityType.CUSTOMER,
|
||||||
EntityType.DOMAIN, EntityType.MOBILE_APP, EntityType.OAUTH2_CLIENT, EntityType.MOBILE_APP_BUNDLE
|
EntityType.DOMAIN, EntityType.MOBILE_APP_BUNDLE, EntityType.MOBILE_APP, EntityType.OAUTH2_CLIENT
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -468,7 +468,7 @@ public class UserServiceImpl extends AbstractCachedEntityService<UserCacheKey, U
|
|||||||
public void saveMobileSession(TenantId tenantId, UserId userId, String mobileToken, MobileSessionInfo sessionInfo) {
|
public void saveMobileSession(TenantId tenantId, UserId userId, String mobileToken, MobileSessionInfo sessionInfo) {
|
||||||
removeMobileSession(tenantId, mobileToken); // unassigning fcm token from other users, in case we didn't clean up it on log out or mobile app uninstall
|
removeMobileSession(tenantId, mobileToken); // unassigning fcm token from other users, in case we didn't clean up it on log out or mobile app uninstall
|
||||||
|
|
||||||
UserMobileSessionInfo mobileInfo = findMobileInfo(tenantId, userId).orElseGet(() -> {
|
UserMobileSessionInfo mobileInfo = findMobileSessionInfo(tenantId, userId).orElseGet(() -> {
|
||||||
UserMobileSessionInfo newMobileInfo = new UserMobileSessionInfo();
|
UserMobileSessionInfo newMobileInfo = new UserMobileSessionInfo();
|
||||||
newMobileInfo.setSessions(new HashMap<>());
|
newMobileInfo.setSessions(new HashMap<>());
|
||||||
return newMobileInfo;
|
return newMobileInfo;
|
||||||
@ -479,12 +479,12 @@ public class UserServiceImpl extends AbstractCachedEntityService<UserCacheKey, U
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, MobileSessionInfo> findMobileSessions(TenantId tenantId, UserId userId) {
|
public Map<String, MobileSessionInfo> findMobileSessions(TenantId tenantId, UserId userId) {
|
||||||
return findMobileInfo(tenantId, userId).map(UserMobileSessionInfo::getSessions).orElse(Collections.emptyMap());
|
return findMobileSessionInfo(tenantId, userId).map(UserMobileSessionInfo::getSessions).orElse(Collections.emptyMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MobileSessionInfo findMobileSession(TenantId tenantId, UserId userId, String mobileToken) {
|
public MobileSessionInfo findMobileSession(TenantId tenantId, UserId userId, String mobileToken) {
|
||||||
return findMobileInfo(tenantId, userId).map(mobileInfo -> mobileInfo.getSessions().get(mobileToken)).orElse(null);
|
return findMobileSessionInfo(tenantId, userId).map(mobileInfo -> mobileInfo.getSessions().get(mobileToken)).orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -495,7 +495,7 @@ public class UserServiceImpl extends AbstractCachedEntityService<UserCacheKey, U
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<UserMobileSessionInfo> findMobileInfo(TenantId tenantId, UserId userId) {
|
private Optional<UserMobileSessionInfo> findMobileSessionInfo(TenantId tenantId, UserId userId) {
|
||||||
return Optional.ofNullable(userSettingsService.findUserSettings(tenantId, userId, UserSettingsType.MOBILE))
|
return Optional.ofNullable(userSettingsService.findUserSettings(tenantId, userId, UserSettingsType.MOBILE))
|
||||||
.map(UserSettings::getSettings).map(settings -> JacksonUtil.treeToValue(settings, UserMobileSessionInfo.class));
|
.map(UserSettings::getSettings).map(settings -> JacksonUtil.treeToValue(settings, UserMobileSessionInfo.class));
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user