This is an automated email from the ASF dual-hosted git repository. harikrishna pushed a commit to branch 2FA in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 2b5b95b841c0407cb315605d164b95311967a3c8 Author: Harikrishna Patnala <harikrishna.patn...@gmail.com> AuthorDate: Sun Nov 27 23:11:17 2022 +0530 Refactored code --- .../java/com/cloud/user/AccountManagerImpl.java | 57 +++++++++++++--------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/server/src/main/java/com/cloud/user/AccountManagerImpl.java b/server/src/main/java/com/cloud/user/AccountManagerImpl.java index b6483c20fa2..1ab05cfaa00 100644 --- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java +++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java @@ -3200,38 +3200,50 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M Account caller = CallContext.current().getCallingAccount(); Account owner = _accountService.getActiveAccountById(caller.getId()); - UserTwoFactorAuthenticationSetupResponse response = new UserTwoFactorAuthenticationSetupResponse(); if (cmd.getEnable()) { checkAccess(caller, null, true, owner); Long userId = CallContext.current().getCallingUserId(); - UserAccountVO userAccount = _userAccountDao.findById(userId); - UserVO userVO = _userDao.findById(userId); - if (!enableUserTwoFactorAuthentication.valueIn(userAccount.getDomainId())) { - throw new CloudRuntimeException("2FA is not enabled for this domain or at global level"); - } + UserTwoFactorAuthenticationSetupResponse response = enableTwoFactorAuthentication(userId, providerName); + return response; + } - if (StringUtils.isEmpty(providerName)) { - throw new InvalidParameterValueException("Provider name is mandatory to setup 2FA"); - } - UserTwoFactorAuthenticator provider = getUserTwoFactorAuthenticationProvider(providerName); - String code = provider.setup2FAKey(userAccount); - UserVO user = _userDao.createForUpdate(); - user.setKeyFor2fa(code); - user.setUser2faProvider(provider.getName()); - user.setTwoFactorAuthenticationEnabled(true); - _userDao.update(userId, user); + // Admin can disable 2FA of the users + Long userId = cmd.getUserId(); + UserTwoFactorAuthenticationSetupResponse response = disableTwoFactorAuthentication(userId, caller, owner); + + return response; + } - response.setId(userVO.getUuid()); - response.setUsername(userAccount.getUsername()); - response.setSecretCode(code); + private UserTwoFactorAuthenticationSetupResponse enableTwoFactorAuthentication(Long userId, String providerName) { + UserAccountVO userAccount = _userAccountDao.findById(userId); + UserVO userVO = _userDao.findById(userId); - return response; + if (!enableUserTwoFactorAuthentication.valueIn(userAccount.getDomainId())) { + throw new CloudRuntimeException("2FA is not enabled for this domain or at global level"); } - // Admin can disable 2FA of the users + if (StringUtils.isEmpty(providerName)) { + throw new InvalidParameterValueException("Provider name is mandatory to setup 2FA"); + } + UserTwoFactorAuthenticator provider = getUserTwoFactorAuthenticationProvider(providerName); + String code = provider.setup2FAKey(userAccount); + UserVO user = _userDao.createForUpdate(); + user.setKeyFor2fa(code); + user.setUser2faProvider(provider.getName()); + user.setTwoFactorAuthenticationEnabled(true); + _userDao.update(userId, user); + + UserTwoFactorAuthenticationSetupResponse response = new UserTwoFactorAuthenticationSetupResponse(); + response.setId(userVO.getUuid()); + response.setUsername(userAccount.getUsername()); + response.setSecretCode(code); + + return response; + } + + private UserTwoFactorAuthenticationSetupResponse disableTwoFactorAuthentication(Long userId, Account caller, Account owner) { UserVO userVO = null; - Long userId = cmd.getUserId(); if (userId != null) { userVO = validateUser(userId, caller.getDomainId()); if (userVO == null) { @@ -3250,6 +3262,7 @@ public class AccountManagerImpl extends ManagerBase implements AccountManager, M user.setTwoFactorAuthenticationEnabled(false); _userDao.update(userVO.getId(), user); + UserTwoFactorAuthenticationSetupResponse response = new UserTwoFactorAuthenticationSetupResponse(); response.setId(userVO.getUuid()); response.setUsername(userVO.getUsername());