mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Delete tenant data
This commit is contained in:
commit
ea542894cf
@ -546,4 +546,5 @@ public interface ApplicationManager {
|
||||
* @throws ApplicationManagementException thrown if an error occurs when deleting data
|
||||
*/
|
||||
void deleteApplicationDataOfTenant(int tenantId) throws ApplicationManagementException;
|
||||
void deleteApplicationDataByTenantDomain(String tenantDomain) throws ApplicationManagementException;
|
||||
}
|
||||
|
||||
@ -384,6 +384,11 @@
|
||||
<groupId>com.squareup.okio</groupId>
|
||||
<artifactId>okio</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.multitenancy</groupId>
|
||||
<artifactId>org.wso2.carbon.tenant.mgt</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
||||
|
||||
@ -96,6 +96,8 @@ import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementEx
|
||||
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dto.DeviceType;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.wso2.carbon.stratos.common.beans.TenantInfoBean;
|
||||
import org.wso2.carbon.tenant.mgt.services.TenantMgtAdminService;
|
||||
import org.wso2.carbon.user.api.UserRealm;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
|
||||
@ -4428,15 +4430,18 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (ApplicationManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Database access error is occurred when getting applications for tenant with ID: " + tenantId;
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (LifeCycleManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Error occurred while deleting life-cycle state data of application releases of the tenant"
|
||||
+ " of ID: " + tenantId ;
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (ReviewManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Error occurred while deleting reviews of application releases of the applications"
|
||||
+ " of tenant ID: " + tenantId ;
|
||||
log.error(msg, e);
|
||||
@ -4451,4 +4456,80 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
ConnectionManagerUtil.closeDBConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteApplicationDataByTenantDomain(String tenantDomain) throws ApplicationManagementException {
|
||||
int tenantId;
|
||||
try{
|
||||
TenantMgtAdminService tenantMgtAdminService = new TenantMgtAdminService();
|
||||
TenantInfoBean tenantInfoBean = tenantMgtAdminService.getTenant(tenantDomain);
|
||||
tenantId = tenantInfoBean.getTenantId();
|
||||
|
||||
} catch (Exception e) {
|
||||
String msg = "Error getting tenant ID from domain: "
|
||||
+ tenantDomain;
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
}
|
||||
|
||||
try {
|
||||
ConnectionManagerUtil.beginDBTransaction();
|
||||
|
||||
vppApplicationDAO.deleteAssociationByTenant(tenantId);
|
||||
vppApplicationDAO.deleteVppUserByTenant(tenantId);
|
||||
vppApplicationDAO.deleteAssetsByTenant(tenantId);
|
||||
reviewDAO.deleteReviewsByTenant(tenantId);
|
||||
subscriptionDAO.deleteOperationMappingByTenant(tenantId);
|
||||
subscriptionDAO.deleteDeviceSubscriptionByTenant(tenantId);
|
||||
subscriptionDAO.deleteGroupSubscriptionByTenant(tenantId);
|
||||
subscriptionDAO.deleteRoleSubscriptionByTenant(tenantId);
|
||||
subscriptionDAO.deleteUserSubscriptionByTenant(tenantId);
|
||||
applicationDAO.deleteAppFavouritesByTenant(tenantId);
|
||||
applicationDAO.deleteApplicationTagsMappingByTenant(tenantId);
|
||||
applicationDAO.deleteApplicationTagsByTenant(tenantId);
|
||||
applicationDAO.deleteApplicationCategoryMappingByTenant(tenantId);
|
||||
applicationDAO.deleteApplicationCategoriesByTenant(tenantId);
|
||||
subscriptionDAO.deleteScheduledSubscriptionByTenant(tenantId);
|
||||
lifecycleStateDAO.deleteAppLifecycleStatesByTenant(tenantId);
|
||||
applicationReleaseDAO.deleteReleasesByTenant(tenantId);
|
||||
visibilityDAO.deleteAppUnrestrictedRolesByTenant(tenantId);
|
||||
spApplicationDAO.deleteSPApplicationMappingByTenant(tenantId);
|
||||
spApplicationDAO.deleteIdentityServerByTenant(tenantId);
|
||||
applicationDAO.deleteApplicationsByTenant(tenantId);
|
||||
APIUtil.getApplicationStorageManager().deleteAppFolderOfTenant(tenantId);
|
||||
|
||||
ConnectionManagerUtil.commitDBTransaction();
|
||||
} catch (DBConnectionException e) {
|
||||
String msg = "Error occurred while observing the database connection to delete applications for tenant with ID: "
|
||||
+ tenantId;
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (ApplicationManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Database access error is occurred when getting applications for tenant with ID: " + tenantId;
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (LifeCycleManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Error occurred while deleting life-cycle state data of application releases of the tenant"
|
||||
+ " of ID: " + tenantId ;
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (ReviewManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Error occurred while deleting reviews of application releases of the applications"
|
||||
+ " of tenant ID: " + tenantId ;
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (ApplicationStorageManagementException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Error occurred while deleting App folder of tenant"
|
||||
+ " of tenant ID: " + tenantId ;
|
||||
log.error(msg, e);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} finally {
|
||||
ConnectionManagerUtil.closeDBConnection();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@
|
||||
*/
|
||||
package io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl.admin;
|
||||
|
||||
import io.entgra.device.mgt.core.application.mgt.common.exception.ApplicationManagementException;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@ -93,11 +94,13 @@ public class UserManagementAdminServiceImpl implements UserManagementAdminServic
|
||||
public Response deleteTenantByDomain(@PathParam("tenantDomain") String tenantDomain) {
|
||||
try {
|
||||
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
if(tenantId != MultitenantConstants.SUPER_TENANT_ID){
|
||||
if (tenantId != MultitenantConstants.SUPER_TENANT_ID){
|
||||
String msg = "Only super tenants are allowed to delete tenants";
|
||||
log.error(msg);
|
||||
return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build();
|
||||
}else{
|
||||
} else {
|
||||
DeviceMgtAPIUtils.getApplicationManager().deleteApplicationDataByTenantDomain(tenantDomain);
|
||||
DeviceMgtAPIUtils.getDeviceManagementService().deleteDeviceDataByTenantDomain(tenantDomain);
|
||||
TenantMgtAdminService tenantMgtAdminService = new TenantMgtAdminService();
|
||||
tenantMgtAdminService.deleteTenant(tenantDomain);
|
||||
String msg = "Tenant Deletion process has been initiated for tenant:" + tenantDomain;
|
||||
@ -108,6 +111,14 @@ public class UserManagementAdminServiceImpl implements UserManagementAdminServic
|
||||
String msg = "Error deleting tenant: " + tenantDomain;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
} catch (ApplicationManagementException e) {
|
||||
String msg = "Error deleting application data of tenant: " + tenantDomain;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error deleting device data of tenant: " + tenantDomain;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1070,4 +1070,5 @@ public interface DeviceManagementProviderService {
|
||||
List<Application> getInstalledApplicationsOnDevice(Device device) throws DeviceManagementException;
|
||||
List<Device> getEnrolledDevicesSince(Date since) throws DeviceManagementException;
|
||||
List<Device> getEnrolledDevicesPriorTo(Date before) throws DeviceManagementException;
|
||||
void deleteDeviceDataByTenantDomain(String tenantDomain) throws DeviceManagementException;
|
||||
}
|
||||
|
||||
@ -21,6 +21,7 @@ package io.entgra.device.mgt.core.device.mgt.core.service;
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import com.google.gson.Gson;
|
||||
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.DeviceStatusManagementService;
|
||||
import io.entgra.device.mgt.core.device.mgt.core.dao.TenantDAO;
|
||||
import io.entgra.device.mgt.core.device.mgt.extensions.logger.spi.EntgraLogger;
|
||||
import io.entgra.device.mgt.core.notification.logger.DeviceEnrolmentLogContext;
|
||||
import io.entgra.device.mgt.core.notification.logger.impl.EntgraDeviceEnrolmentLoggerImpl;
|
||||
@ -160,7 +161,6 @@ import java.sql.Timestamp;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DeviceManagementProviderServiceImpl implements DeviceManagementProviderService,
|
||||
@ -178,6 +178,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
private final ApplicationDAO applicationDAO;
|
||||
private MetadataDAO metadataDAO;
|
||||
private final DeviceStatusDAO deviceStatusDAO;
|
||||
private final TenantDAO tenantDao;
|
||||
int count = 0;
|
||||
|
||||
public DeviceManagementProviderServiceImpl() {
|
||||
@ -188,6 +189,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
this.enrollmentDAO = DeviceManagementDAOFactory.getEnrollmentDAO();
|
||||
this.metadataDAO = MetadataManagementDAOFactory.getMetadataDAO();
|
||||
this.deviceStatusDAO = DeviceManagementDAOFactory.getDeviceStatusDAO();
|
||||
this.tenantDao = DeviceManagementDAOFactory.getTenantDAO();
|
||||
|
||||
/* Registering a listener to retrieve events when some device management service plugin is installed after
|
||||
* the component is done getting initialized */
|
||||
@ -5187,4 +5189,94 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
}
|
||||
return devices;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDeviceDataByTenantDomain(String tenantDomain) throws DeviceManagementException {
|
||||
int tenantId;
|
||||
try{
|
||||
TenantMgtAdminService tenantMgtAdminService = new TenantMgtAdminService();
|
||||
TenantInfoBean tenantInfoBean = tenantMgtAdminService.getTenant(tenantDomain);
|
||||
tenantId = tenantInfoBean.getTenantId();
|
||||
|
||||
} catch (Exception e) {
|
||||
String msg = "Error getting tenant ID from domain: "
|
||||
+ tenantDomain;
|
||||
log.error(msg);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
|
||||
try {
|
||||
DeviceManagementDAOFactory.beginTransaction();
|
||||
|
||||
tenantDao.deleteExternalPermissionMapping(tenantId);
|
||||
tenantDao.deleteExternalDeviceMappingByTenantId(tenantId);
|
||||
tenantDao.deleteExternalGroupMappingByTenantId(tenantId);
|
||||
// TODO: Check whether deleting DM_DEVICE_ORGANIZATION table data is necessary
|
||||
// tenantDao.deleteDeviceOrganizationByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceHistoryLastSevenDaysByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceDetailByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceLocationByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceInfoByTenantId(tenantId);
|
||||
tenantDao.deleteNotificationByTenantId(tenantId);
|
||||
tenantDao.deleteAppIconsByTenantId(tenantId);
|
||||
tenantDao.deleteTraccarUnsyncedDevicesByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceEventGroupMappingByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceEventByTenantId(tenantId);
|
||||
tenantDao.deleteGeofenceEventMappingByTenantId(tenantId);
|
||||
tenantDao.deleteGeofenceGroupMappingByTenantId(tenantId);
|
||||
tenantDao.deleteGeofenceByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceGroupPolicyByTenantId(tenantId);
|
||||
tenantDao.deleteDynamicTaskPropertiesByTenantId(tenantId);
|
||||
tenantDao.deleteDynamicTaskByTenantId(tenantId);
|
||||
tenantDao.deleteMetadataByTenantId(tenantId);
|
||||
tenantDao.deleteOTPDataByTenantId(tenantId);
|
||||
tenantDao.deleteSubOperationTemplate(tenantId);
|
||||
tenantDao.deleteDeviceSubTypeByTenantId(tenantId);
|
||||
tenantDao.deleteCEAPoliciesByTenantId(tenantId);
|
||||
|
||||
tenantDao.deleteApplicationByTenantId(tenantId);
|
||||
tenantDao.deletePolicyCriteriaPropertiesByTenantId(tenantId);
|
||||
tenantDao.deletePolicyCriteriaByTenantId(tenantId);
|
||||
tenantDao.deleteCriteriaByTenantId(tenantId);
|
||||
tenantDao.deletePolicyChangeManagementByTenantId(tenantId);
|
||||
tenantDao.deletePolicyComplianceFeaturesByTenantId(tenantId);
|
||||
tenantDao.deletePolicyComplianceStatusByTenantId(tenantId);
|
||||
tenantDao.deleteRolePolicyByTenantId(tenantId);
|
||||
tenantDao.deleteUserPolicyByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceTypePolicyByTenantId(tenantId);
|
||||
tenantDao.deleteDevicePolicyAppliedByTenantId(tenantId);
|
||||
tenantDao.deleteDevicePolicyByTenantId(tenantId);
|
||||
tenantDao.deletePolicyCorrectiveActionByTenantId(tenantId);
|
||||
tenantDao.deletePolicyByTenantId(tenantId);
|
||||
tenantDao.deleteProfileFeaturesByTenantId(tenantId);
|
||||
tenantDao.deleteProfileByTenantId(tenantId);
|
||||
|
||||
tenantDao.deleteDeviceOperationResponseLargeByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceOperationResponseByTenantId(tenantId);
|
||||
tenantDao.deleteEnrolmentOpMappingByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceStatusByTenantId(tenantId);
|
||||
tenantDao.deleteEnrolmentByTenantId(tenantId);
|
||||
tenantDao.deleteOperationByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceGroupMapByTenantId(tenantId);
|
||||
tenantDao.deleteGroupPropertiesByTenantId(tenantId);
|
||||
tenantDao.deleteDevicePropertiesByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceByTenantId(tenantId);
|
||||
tenantDao.deleteRoleGroupMapByTenantId(tenantId);
|
||||
tenantDao.deleteGroupByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceCertificateByTenantId(tenantId);
|
||||
|
||||
DeviceManagementDAOFactory.commitTransaction();
|
||||
} catch (DeviceManagementDAOException e) {
|
||||
DeviceManagementDAOFactory.rollbackTransaction();
|
||||
String msg = "Error deleting data of tenant of ID: '" + tenantId + "'";
|
||||
log.error(msg);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
} catch (TransactionManagementException e) {
|
||||
String msg = "Error while initiating transaction when trying to delete tenant info of '" + tenantId + "'";
|
||||
log.error(msg);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
} finally {
|
||||
DeviceManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,12 +142,13 @@ public class TenantManagerImpl implements TenantManager {
|
||||
log.debug("Request is received to delete Device related data of tenant with ID: " + tenantId);
|
||||
}
|
||||
try {
|
||||
DeviceManagementDAOFactory.openConnection();
|
||||
DeviceManagementDAOFactory.beginTransaction();
|
||||
|
||||
tenantDao.deleteExternalPermissionMapping(tenantId);
|
||||
tenantDao.deleteExternalDeviceMappingByTenantId(tenantId);
|
||||
tenantDao.deleteExternalGroupMappingByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceOrganizationByTenantId(tenantId);
|
||||
// TODO: Check whether deleting DM_DEVICE_ORGANIZATION table data is necessary
|
||||
// tenantDao.deleteDeviceOrganizationByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceHistoryLastSevenDaysByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceDetailByTenantId(tenantId);
|
||||
tenantDao.deleteDeviceLocationByTenantId(tenantId);
|
||||
@ -206,8 +207,8 @@ public class TenantManagerImpl implements TenantManager {
|
||||
String msg = "Error deleting data of tenant of ID: '" + tenantId + "'";
|
||||
log.error(msg);
|
||||
throw new TenantMgtException(msg, e);
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error accessing the database when trying to delete tenant info of '" + tenantId + "'";
|
||||
} catch (TransactionManagementException e) {
|
||||
String msg = "Error initializing transaction when trying to delete tenant info of '" + tenantId + "'";
|
||||
log.error(msg);
|
||||
throw new TenantMgtException(msg, e);
|
||||
} finally {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user