package io.cattle.platform.iaas.api.account; import io.cattle.platform.api.action.ActionHandler; import io.cattle.platform.core.constants.AccountConstants; import io.cattle.platform.core.dao.AccountDao; import io.cattle.platform.core.model.Account; import io.cattle.platform.object.ObjectManager; import io.cattle.platform.object.process.ObjectProcessManager; import io.cattle.platform.object.process.StandardProcess; import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.util.ResponseCodes; import javax.inject.Inject; public class AccountDeactivateActionHandler implements ActionHandler { @Inject ObjectProcessManager objectProcessManager; @Inject ObjectManager objectManager; @Inject AccountDao accountDao; @Override public Object perform(String name, Object obj, ApiRequest request) { if (obj instanceof Account) { Account accountToDeactivate = (Account) obj; if (AccountConstants.ADMIN_KIND.equalsIgnoreCase(accountToDeactivate.getKind())) { Account anAdminAccount = accountDao.getAdminAccountExclude(accountToDeactivate.getId()); if (anAdminAccount == null) { throw new ClientVisibleException(ResponseCodes.METHOD_NOT_ALLOWED, AccountConstants.LAST_ADMIN_ACCOUNT, "Cannot deactivate the last admin account.", AccountConstants.ADMIN_REQUIRED_MESSAGE); } } else if(AccountConstants.PROJECT_KIND.equalsIgnoreCase(accountToDeactivate.getKind())) { accountToDeactivate = accountDao.getAccountById(accountToDeactivate.getId()); if (accountToDeactivate == null) { throw new ClientVisibleException(ResponseCodes.NOT_FOUND); } } objectProcessManager.scheduleStandardProcess(StandardProcess.DEACTIVATE, accountToDeactivate, null); accountToDeactivate = objectManager.reload(accountToDeactivate); return accountToDeactivate; } else { return null; } } @Override public String getName() { return "account.deactivate"; } }