From 0272bda2ce8c7d41ba8d977dba2c0780542f4e2c Mon Sep 17 00:00:00 2001 From: pasindu Date: Thu, 5 Sep 2024 09:04:17 +0530 Subject: [PATCH] Get server startup handlers to a single point in device-mgt core --- .../internal/DeviceManagementDataHolder.java | 10 +-- .../DeviceManagementServiceComponent.java | 11 +-- ...va => DeviceManagementStartupHandler.java} | 78 ++++++++++++++-- .../core/internal/UserRoleCreateObserver.java | 89 ------------------- 4 files changed, 78 insertions(+), 110 deletions(-) rename components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/{OperationStartupHandler.java => DeviceManagementStartupHandler.java} (51%) delete mode 100644 components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/UserRoleCreateObserver.java diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementDataHolder.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementDataHolder.java index 95d3d9b0a4..c9ae912a70 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementDataHolder.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementDataHolder.java @@ -100,7 +100,7 @@ public class DeviceManagementDataHolder { private DeviceStatusManagementService deviceStatusManagementService; private APIApplicationServices apiApplicationServices; private PublisherRESTAPIServices publisherRESTAPIServices; - private OperationStartupHandler operationStartupHandler; + private DeviceManagementStartupHandler deviceManagementStartupHandler; private final Map deviceStatusTaskPluginConfigs = Collections.synchronizedMap( new HashMap<>()); @@ -459,11 +459,11 @@ public class DeviceManagementDataHolder { this.groupAccessAuthorizationService = groupAccessAuthorizationService; } - public OperationStartupHandler getOperationStartupHandler() { - return operationStartupHandler; + public DeviceManagementStartupHandler getDeviceManagementStartupHandler() { + return deviceManagementStartupHandler; } - public void setOperationStartupHandler(OperationStartupHandler operationStartupHandler) { - this.operationStartupHandler = operationStartupHandler; + public void setDeviceManagementStartupHandler(DeviceManagementStartupHandler deviceManagementStartupHandler) { + this.deviceManagementStartupHandler = deviceManagementStartupHandler; } } diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementServiceComponent.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementServiceComponent.java index 125a2f0524..58e1d34ec8 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementServiceComponent.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementServiceComponent.java @@ -259,13 +259,10 @@ public class DeviceManagementServiceComponent { TenantCreateObserver listener = new TenantCreateObserver(); bundleContext.registerService(Axis2ConfigurationContextObserver.class.getName(), listener, null); - UserRoleCreateObserver userRoleCreateObserver = new UserRoleCreateObserver(); - bundleContext.registerService(ServerStartupObserver.class.getName(), userRoleCreateObserver, null); - - /* Registering Device Operation Management Startup Handler */ - OperationStartupHandler operationStartupHandler = new OperationStartupHandler(); - DeviceManagementDataHolder.getInstance().setOperationStartupHandler(operationStartupHandler); - bundleContext.registerService(ServerStartupObserver.class.getName(), operationStartupHandler, null); + /* Registering Device Management Startup Handler */ + DeviceManagementStartupHandler deviceManagementStartupHandler = new DeviceManagementStartupHandler(); + DeviceManagementDataHolder.getInstance().setDeviceManagementStartupHandler(deviceManagementStartupHandler); + bundleContext.registerService(ServerStartupObserver.class.getName(), deviceManagementStartupHandler, null); /* Registering Device Management Service */ DeviceManagementProviderService deviceManagementProvider = new DeviceManagementProviderServiceImpl(); diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/OperationStartupHandler.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementStartupHandler.java similarity index 51% rename from components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/OperationStartupHandler.java rename to components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementStartupHandler.java index b29cb012df..56fabedf6c 100644 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/OperationStartupHandler.java +++ b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/DeviceManagementStartupHandler.java @@ -15,7 +15,6 @@ * specific language governing permissions and limitations * under the License. */ - package io.entgra.device.mgt.core.device.mgt.core.internal; import com.google.gson.Gson; @@ -23,19 +22,25 @@ import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataManagement import io.entgra.device.mgt.core.device.mgt.common.exceptions.TransactionManagementException; import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.Metadata; import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.MetadataManagementService; +import io.entgra.device.mgt.core.device.mgt.core.DeviceManagementConstants; +import io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.dto.OperationConfig; import io.entgra.device.mgt.core.device.mgt.core.operation.mgt.dao.OperationDAO; import io.entgra.device.mgt.core.device.mgt.core.operation.mgt.dao.OperationManagementDAOException; import io.entgra.device.mgt.core.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; -import io.entgra.device.mgt.core.device.mgt.core.operation.change.status.task.dto.OperationConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.core.ServerStartupObserver; +import org.wso2.carbon.user.api.AuthorizationManager; +import org.wso2.carbon.user.api.Permission; +import org.wso2.carbon.user.api.UserStoreException; +import org.wso2.carbon.user.api.UserStoreManager; +import org.wso2.carbon.utils.multitenancy.MultitenantConstants; -public class OperationStartupHandler implements ServerStartupObserver { - private static final Log log = LogFactory.getLog(OperationStartupHandler.class); +public class DeviceManagementStartupHandler implements ServerStartupObserver { + private static final Log log = LogFactory.getLog(DeviceManagementStartupHandler.class); private static final Gson gson = new Gson(); - private final OperationDAO operationDAO = OperationManagementDAOFactory.getOperationDAO(); private static final String OPERATION_CONFIG = "OPERATION_CONFIG"; + private static final String tenantDomain = MultitenantConstants.SUPER_TENANT_DOMAIN_NAME; @Override public void completingServerStartup() { @@ -44,11 +49,66 @@ public class OperationStartupHandler implements ServerStartupObserver { @Override public void completedServerStartup() { + userRoleCreateObserver(); + operationStatusChangeObserver(); + } + + private void userRoleCreateObserver() { + try { + UserStoreManager userStoreManager = + DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm( + MultitenantConstants.SUPER_TENANT_ID).getUserStoreManager(); + String tenantAdminName = + DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm( + MultitenantConstants.SUPER_TENANT_ID).getRealmConfiguration().getAdminUserName(); + AuthorizationManager authorizationManager = DeviceManagementDataHolder.getInstance().getRealmService() + .getTenantUserRealm(MultitenantConstants.SUPER_TENANT_ID).getAuthorizationManager(); + + if (!userStoreManager.isExistingRole(DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN)) { + userStoreManager.addRole( + DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN, + null, + DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_ADMIN); + } else { + for (Permission permission : DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_ADMIN) { + authorizationManager.authorizeRole(DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN, + permission.getResourceId(), permission.getAction()); + } + } + if (!userStoreManager.isExistingRole(DeviceManagementConstants.User.DEFAULT_DEVICE_USER)) { + userStoreManager.addRole( + DeviceManagementConstants.User.DEFAULT_DEVICE_USER, + null, + DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_USER); + } else { + for (Permission permission : DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_USER) { + authorizationManager.authorizeRole(DeviceManagementConstants.User.DEFAULT_DEVICE_USER, + permission.getResourceId(), permission.getAction()); + } + } + userStoreManager.updateRoleListOfUser(tenantAdminName, null, + new String[]{DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN, + DeviceManagementConstants.User.DEFAULT_DEVICE_USER}); - MetadataManagementService metadataManagementService = DeviceManagementDataHolder.getInstance().getMetadataManagementService(); + if (log.isDebugEnabled()) { + log.debug("Device management roles: " + DeviceManagementConstants.User.DEFAULT_DEVICE_USER + ", " + + DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN + " created for the tenant:" + tenantDomain + "." + ); + log.debug("Tenant administrator: " + tenantAdminName + "@" + tenantDomain + + " is assigned to the role:" + DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN + "." + ); + } + } catch (UserStoreException e) { + log.error("Error occurred while creating roles for the tenant: " + tenantDomain + "."); + } + } + + private void operationStatusChangeObserver () { + MetadataManagementService metadataManagementService = DeviceManagementDataHolder + .getInstance().getMetadataManagementService(); + OperationDAO operationDAO = OperationManagementDAOFactory.getOperationDAO(); Metadata metadata; int numOfRecordsUpdated; - try { metadata = metadataManagementService.retrieveMetadata(OPERATION_CONFIG); if (metadata != null) { @@ -57,7 +117,7 @@ public class OperationStartupHandler implements ServerStartupObserver { String initialOperationStatus = operationConfiguration.getInitialOperationStatus(); String requiredStatusChange = operationConfiguration.getRequiredStatusChange(); - for (String deviceType: deviceTypes) { + for (String deviceType : deviceTypes) { try { OperationManagementDAOFactory.beginTransaction(); try { @@ -74,7 +134,7 @@ public class OperationStartupHandler implements ServerStartupObserver { } catch (TransactionManagementException e) { String msg = "Transactional error occurred while updating the operation status"; log.error(msg, e); - } finally { + } finally { OperationManagementDAOFactory.closeConnection(); } } diff --git a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/UserRoleCreateObserver.java b/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/UserRoleCreateObserver.java deleted file mode 100644 index f7b2a27a4b..0000000000 --- a/components/device-mgt/io.entgra.device.mgt.core.device.mgt.core/src/main/java/io/entgra/device/mgt/core/device/mgt/core/internal/UserRoleCreateObserver.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. licenses this file to you 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 io.entgra.device.mgt.core.device.mgt.core.internal; - -import io.entgra.device.mgt.core.device.mgt.core.DeviceManagementConstants; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.core.ServerStartupObserver; -import org.wso2.carbon.user.api.AuthorizationManager; -import org.wso2.carbon.user.api.Permission; -import org.wso2.carbon.user.api.UserStoreException; -import org.wso2.carbon.user.api.UserStoreManager; -import org.wso2.carbon.utils.multitenancy.MultitenantConstants; - -public class UserRoleCreateObserver implements ServerStartupObserver { - private static final Log log = LogFactory.getLog(UserRoleCreateObserver.class); - @Override - public void completingServerStartup() { - - } - - @Override - public void completedServerStartup() { - String tenantDomain = MultitenantConstants.SUPER_TENANT_DOMAIN_NAME; - - try { - UserStoreManager userStoreManager = - DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm( - MultitenantConstants.SUPER_TENANT_ID).getUserStoreManager(); - String tenantAdminName = - DeviceManagementDataHolder.getInstance().getRealmService().getTenantUserRealm( - MultitenantConstants.SUPER_TENANT_ID).getRealmConfiguration().getAdminUserName(); - AuthorizationManager authorizationManager = DeviceManagementDataHolder.getInstance().getRealmService() - .getTenantUserRealm(MultitenantConstants.SUPER_TENANT_ID).getAuthorizationManager(); - - if (!userStoreManager.isExistingRole(DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN)) { - userStoreManager.addRole( - DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN, - null, - DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_ADMIN); - } else { - for (Permission permission : DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_ADMIN) { - authorizationManager.authorizeRole(DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN, - permission.getResourceId(), permission.getAction()); - } - } - if (!userStoreManager.isExistingRole(DeviceManagementConstants.User.DEFAULT_DEVICE_USER)) { - userStoreManager.addRole( - DeviceManagementConstants.User.DEFAULT_DEVICE_USER, - null, - DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_USER); - } else { - for (Permission permission : DeviceManagementConstants.User.PERMISSIONS_FOR_DEVICE_USER) { - authorizationManager.authorizeRole(DeviceManagementConstants.User.DEFAULT_DEVICE_USER, - permission.getResourceId(), permission.getAction()); - } - } - userStoreManager.updateRoleListOfUser(tenantAdminName, null, - new String[] {DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN, - DeviceManagementConstants.User.DEFAULT_DEVICE_USER}); - - if (log.isDebugEnabled()) { - log.debug("Device management roles: " + DeviceManagementConstants.User.DEFAULT_DEVICE_USER + ", " + - DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN + " created for the tenant:" + tenantDomain + "." - ); - log.debug("Tenant administrator: " + tenantAdminName + "@" + tenantDomain + - " is assigned to the role:" + DeviceManagementConstants.User.DEFAULT_DEVICE_ADMIN + "." - ); - } - } catch (UserStoreException e) { - log.error("Error occurred while creating roles for the tenant: " + tenantDomain + "."); - } - } -}