mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Fix app release deleting API
This commit is contained in:
parent
29efebdb99
commit
ed780cbe9a
@ -67,11 +67,9 @@ public interface ApplicationManager {
|
||||
*
|
||||
* @param applicationId ID of tha application
|
||||
* @param releaseUuid UUID of tha application release
|
||||
* @param handleConnections Whether it is necessary handle DB connections.
|
||||
* @throws ApplicationManagementException Application Management Exception
|
||||
*/
|
||||
String deleteApplicationRelease(int applicationId, String releaseUuid, boolean handleConnections) throws
|
||||
ApplicationManagementException;
|
||||
String deleteApplicationRelease(int applicationId, String releaseUuid) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get the applications based on the search filter.
|
||||
@ -132,14 +130,6 @@ public interface ApplicationManager {
|
||||
void changeLifecycleState(int applicationId, String releaseUuid, LifecycleState state)
|
||||
throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* Get the application if application is an accessible one.
|
||||
*
|
||||
* @param applicationId ID of the Application.
|
||||
* @throws ApplicationManagementException Application Management Exception.
|
||||
*/
|
||||
Application getApplicationIfAccessible(int applicationId) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To update release images such as icons, banner and screenshots.
|
||||
*
|
||||
|
||||
@ -484,6 +484,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
}
|
||||
}
|
||||
|
||||
// todo rethink about this method
|
||||
private List<ApplicationRelease> getReleases(Application application, String releaseState)
|
||||
throws ApplicationManagementException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
@ -545,16 +546,20 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
Application application;
|
||||
|
||||
try {
|
||||
if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) {
|
||||
throw new ApplicationManagementException(
|
||||
"You don't have permission to delete this application. In order to delete an application you "
|
||||
+ "need to have admin permission");
|
||||
}
|
||||
ConnectionManagerUtil.beginDBTransaction();
|
||||
application = getApplicationIfAccessible(applicationId);
|
||||
application = this.applicationDAO.getApplicationById(applicationId, tenantId);
|
||||
|
||||
|
||||
if (application == null) {
|
||||
throw new ApplicationManagementException("Invalid Application");
|
||||
}
|
||||
|
||||
if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION) && !application
|
||||
.getUnrestrictedRoles().isEmpty() && isRoleExists(application.getUnrestrictedRoles(), userName)) {
|
||||
throw new ApplicationManagementException(
|
||||
"You don't have permission to delete this application. In order to delete an application you "
|
||||
+ "need to have required permission. Application ID: " + applicationId);
|
||||
}
|
||||
List<ApplicationRelease> applicationReleases = getReleases(application, null);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request is received to delete applications which are related with the application id "
|
||||
@ -580,6 +585,13 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
this.lifecycleStateDAO
|
||||
.addLifecycleState(lifecycleState, applicationId, applicationRelease.getUuid(),
|
||||
tenantId);
|
||||
} else {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ApplicationManagementException(
|
||||
"Can't delete application release which has the UUID:" + applicationRelease
|
||||
.getUuid() + " and its belongs to the application which has application ID:"
|
||||
+ applicationId + " You have to move the lifecycle state from "
|
||||
+ currentState + " to acceptable state");
|
||||
}
|
||||
currentState = nextState;
|
||||
}
|
||||
@ -652,21 +664,44 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String deleteApplicationRelease(int applicationId, String releaseUuid, boolean handleConnections)
|
||||
public String deleteApplicationRelease(int applicationId, String releaseUuid)
|
||||
throws ApplicationManagementException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
Application application = getApplicationIfAccessible(applicationId);
|
||||
if (application == null) {
|
||||
throw new ApplicationManagementException("Invalid Application ID is received");
|
||||
}
|
||||
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||
Application application;
|
||||
try {
|
||||
ConnectionManagerUtil.beginDBTransaction();
|
||||
ApplicationRelease applicationRelease = getAppReleaseIfExists(applicationId, releaseUuid);
|
||||
LifecycleState appLifecycleState = getLifecycleState(applicationId, applicationRelease.getUuid());
|
||||
application = this.applicationDAO.getApplicationById(applicationId, tenantId);
|
||||
if (application == null) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new NotFoundException("Couldn't find an application for application ID: " + applicationId);
|
||||
}
|
||||
if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION) && !application
|
||||
.getUnrestrictedRoles().isEmpty() && isRoleExists(application.getUnrestrictedRoles(), userName)) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ForbiddenException(
|
||||
"You don't have permission for deleting application release. Application id: " + applicationId
|
||||
+ " and release UUID: " + releaseUuid);
|
||||
}
|
||||
|
||||
ApplicationRelease applicationRelease = this.applicationReleaseDAO
|
||||
.getReleaseByIds(applicationId, releaseUuid, tenantId);
|
||||
if (applicationRelease == null) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new NotFoundException("Couldn't find an application release for application ID: " + applicationId
|
||||
+ " and release UUID: " + releaseUuid);
|
||||
}
|
||||
LifecycleState appLifecycleState = this.lifecycleStateDAO
|
||||
.getLatestLifeCycleState(applicationId, releaseUuid);
|
||||
if (appLifecycleState == null) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new NotFoundException(
|
||||
"Couldn't find an lifecycle sate for application ID: " + applicationId + " and UUID: "
|
||||
+ releaseUuid);
|
||||
}
|
||||
String currentState = appLifecycleState.getCurrentState();
|
||||
if (AppLifecycleState.DEPRECATED.toString().equals(currentState) || AppLifecycleState
|
||||
.REJECTED.toString().equals(currentState) || AppLifecycleState.UNPUBLISHED.toString().equals
|
||||
(currentState)) {
|
||||
if (AppLifecycleState.DEPRECATED.toString().equals(currentState) || AppLifecycleState.REJECTED.toString()
|
||||
.equals(currentState) || AppLifecycleState.UNPUBLISHED.toString().equals(currentState)) {
|
||||
LifecycleState newAppLifecycleState = getLifecycleStateInstant(AppLifecycleState.REMOVED.toString(),
|
||||
appLifecycleState.getCurrentState());
|
||||
if (lifecycleStateManger.isValidStateChange(newAppLifecycleState.getPreviousState(),
|
||||
@ -676,23 +711,46 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
tenantId);
|
||||
ConnectionManagerUtil.commitDBTransaction();
|
||||
} else {
|
||||
// todo
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ApplicationManagementException("Lifecycle State Validation failed. Application Id: " +
|
||||
applicationId + " Application release UUID: " + releaseUuid); }
|
||||
List<String> lifecycleFlow = searchLifecycleStateFlow(currentState,
|
||||
AppLifecycleState.REMOVED.toString());
|
||||
for (String nextState : lifecycleFlow) {
|
||||
LifecycleState lifecycleState = getLifecycleStateInstant(nextState, currentState);
|
||||
if (lifecycleStateManger.isValidStateChange(currentState, nextState)) {
|
||||
this.lifecycleStateDAO
|
||||
.addLifecycleState(lifecycleState, applicationId, applicationRelease.getUuid(),
|
||||
tenantId);
|
||||
} else {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ApplicationManagementException(
|
||||
"Can't delete the application release, You have to move the "
|
||||
+ "lifecycle state from " + currentState + " to acceptable state");
|
||||
}
|
||||
currentState = nextState;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ApplicationManagementException("Can't delete the application release, You have to move the " +
|
||||
"lifecycle state from " + currentState + " to acceptable " +
|
||||
"state");
|
||||
throw new ApplicationManagementException(
|
||||
"Can't delete the application release, You have to move the " + "lifecycle state from "
|
||||
+ currentState + " to acceptable " + "state");
|
||||
}
|
||||
return applicationRelease.getAppHashValue();
|
||||
} catch (ApplicationManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error ocured when getting application data or application release data for application id of "
|
||||
+ applicationId + " application release UUID of the " + releaseUuid);
|
||||
|
||||
} catch (LifeCycleManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
// todo
|
||||
throw new ApplicationManagementException("Can't delete the application release, You have to move the " +
|
||||
"lifecycle state from " + "" + " to acceptable " +
|
||||
"state");
|
||||
throw new ApplicationManagementException(
|
||||
"Error occured when deleting application release for application ID of " + applicationId
|
||||
+ " and application release UUID of " + releaseUuid, e);
|
||||
} catch (UserStoreException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ApplicationManagementException(
|
||||
"Error occured when checking permission for executing application release update. Application ID: "
|
||||
+ applicationId + " and Application UUID: " + releaseUuid);
|
||||
}
|
||||
}
|
||||
|
||||
@ -791,74 +849,6 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the application if application is an accessible one.
|
||||
*
|
||||
* @param applicationId ID of the Application.
|
||||
* @return Application related with the UUID
|
||||
*/
|
||||
public Application getApplicationIfAccessible(int applicationId) throws ApplicationManagementException {
|
||||
if (applicationId <= 0) {
|
||||
throw new ApplicationManagementException("Application id could,t be a negative integer. Hence please add " +
|
||||
"valid application id.");
|
||||
}
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||
Application application;
|
||||
boolean isAppAllowed = false;
|
||||
try {
|
||||
application = this.applicationDAO.getApplicationById(applicationId, tenantId);
|
||||
if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) {
|
||||
return application;
|
||||
}
|
||||
|
||||
if (application != null && !application.getUnrestrictedRoles().isEmpty()) {
|
||||
if (isRoleExists(application.getUnrestrictedRoles(), userName)) {
|
||||
isAppAllowed = true;
|
||||
}
|
||||
} else {
|
||||
isAppAllowed = true;
|
||||
}
|
||||
|
||||
if (!isAppAllowed) {
|
||||
throw new NotFoundException("Application of the " + applicationId
|
||||
+ " does not exist. Please check whether user have permissions to access the application.");
|
||||
}
|
||||
return application;
|
||||
} catch (UserStoreException e) {
|
||||
throw new ApplicationManagementException(
|
||||
"User-store exception while getting application with the " + "application id " + applicationId, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the application release for given UUID if application release is exists and application id is valid one.
|
||||
*
|
||||
* @param applicationUuid UUID of the Application.
|
||||
* @return Application related with the UUID
|
||||
*/
|
||||
private ApplicationRelease getAppReleaseIfExists(int applicationId, String applicationUuid)
|
||||
throws ValidationException, NotFoundException, ApplicationManagementDAOException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
ApplicationRelease applicationRelease;
|
||||
|
||||
if (applicationId <= 0) {
|
||||
throw new ValidationException(
|
||||
"Application id could,t be a negative integer. Hence please add " +
|
||||
"valid application id.");
|
||||
}
|
||||
if (applicationUuid == null) {
|
||||
throw new ValidationException("Application UUID is null. Application UUID is a required "
|
||||
+ "parameter to get the relevant application.");
|
||||
}
|
||||
applicationRelease = this.applicationReleaseDAO.getReleaseByIds(applicationId, applicationUuid, tenantId);
|
||||
if (applicationRelease == null) {
|
||||
throw new NotFoundException("Doesn't exist a application release for application ID: " + applicationId
|
||||
+ "and application UUID: " + applicationUuid);
|
||||
}
|
||||
return applicationRelease;
|
||||
}
|
||||
|
||||
//todo check whether user is whether admin user or application owner, otherwise throw an exception
|
||||
@Override public void updateApplicationImageArtifact(int appId, String uuid, InputStream iconFileStream,
|
||||
InputStream bannerFileStream, List<InputStream> attachments) throws ApplicationManagementException {
|
||||
|
||||
@ -546,7 +546,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
ApplicationStorageManager applicationStorageManager = APIUtil.getApplicationStorageManager();
|
||||
try {
|
||||
String storedLocation = applicationManager.deleteApplicationRelease(applicationId, releaseUuid, true);
|
||||
String storedLocation = applicationManager.deleteApplicationRelease(applicationId, releaseUuid);
|
||||
applicationStorageManager.deleteApplicationReleaseArtifacts(storedLocation);
|
||||
String responseMsg = "Successfully deleted the application release of: " + applicationId + "";
|
||||
return Response.status(Response.Status.OK).entity(responseMsg).build();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user