Example #1
0
        public async Task <IActionResult> Disable2Fa(Disable2FaModel model)
        {
            var setTwoFactorEnabled = new SetTwoFactorEnabledModel
            {
                UserId     = UserId,
                SetEnabled = false
            };

            var disable2FaResult = await _manageEndpoint.SetTwoFactorEnabledAsync(setTwoFactorEnabled);

            if (!disable2FaResult.Succeeded || HasErrors(disable2FaResult))
            {
                _logger.LogError("Failed to disable 2fa for User with ID '{UserId}'.", UserId);
                return(View(model));
            }

            _logger.LogInformation("User with ID '{UserId}' has disabled 2fa.", UserId);
            return(RedirectToAction("TwoFactorAuthentication", "Manage"));
        }
Example #2
0
        public async Task <SetTwoFactorEnabledModel> SetTwoFactorEnabled(SetTwoFactorEnabledModel model)
        {
            var user = await GetUser(model.UserId, model);

            if (user == null)
            {
                return(LogErrorReturnModel(model));
            }

            var set2FaEnabledResult = await _userManager.SetTwoFactorEnabledAsync(user, model.SetEnabled);

            if (set2FaEnabledResult.Succeeded)
            {
                model.Succeeded = true;
                return(model);
            }

            model.Errors = set2FaEnabledResult.Errors.ToList();
            LogErrors(model, "Failed to set two factor authentication");

            return(model);
        }
Example #3
0
        public async Task <IActionResult> EnableAuthenticator(EnableAuthenticatorModel model)
        {
            if (!ModelState.IsValid)
            {
                model = await LoadEnableAuthenticatorModel(UserId);

                HasErrors(model);
                return(View(model));
            }

            var verifyTwoFactorTokenModel = new VerifyTwoFactorTokenModel
            {
                UserId           = UserId,
                VerificationCode = model.Code.Replace(" ", string.Empty).Replace("-", string.Empty)
            };

            verifyTwoFactorTokenModel = await _manageEndpoint.VerifyTwoFactorTokenAsync(verifyTwoFactorTokenModel);

            if (HasErrors(verifyTwoFactorTokenModel))
            {
                return(View(model));
            }
            if (!verifyTwoFactorTokenModel.IsTokenValid)
            {
                ModelState.AddModelError("Code", "Verification code is invalid.");
                model = await LoadEnableAuthenticatorModel(UserId);

                HasErrors(model);
                return(View(model));
            }

            await _signInManager.DoTwoFactorSignInAsync(UserId, false);

            var setTwoFactorEnabledModel = new SetTwoFactorEnabledModel
            {
                UserId     = UserId,
                SetEnabled = true
            };
            var set2FaEnabled = await _manageEndpoint.SetTwoFactorEnabledAsync(setTwoFactorEnabledModel);

            if (HasErrors(set2FaEnabled))
            {
                _logger.LogError("Failed to enable 2FA with an authenticator app for User with ID '{UserId}'.", set2FaEnabled.UserId);
                return(View(model));
            }
            _logger.LogInformation("User with ID '{UserId}' has enabled 2FA with an authenticator app.", set2FaEnabled.UserId);
            model.StatusMessage = "Your authenticator app has been verified.";

            var recoveryCodeStatus = new RecoveryCodeStatusModel {
                UserId = UserId
            };

            recoveryCodeStatus = await _manageEndpoint.CheckRecoveryCodesStatus(recoveryCodeStatus);

            if (HasErrors(model))
            {
                return(View(model));
            }
            if (recoveryCodeStatus.IsUpdated)
            {
                var showRecoveryCodesModel = new ShowRecoveryCodesModel()
                {
                    StatusMessage = model.StatusMessage,
                    RecoveryCodes = recoveryCodeStatus.RecoveryCodes.ToArray()
                };
                return(RedirectToAction("ShowRecoveryCodes", showRecoveryCodesModel));
            }

            return(RedirectToAction("TwoFactorAuthentication"));
        }
Example #4
0
 public async Task <SetTwoFactorEnabledModel> SetTwoFactorEnabledAsync(SetTwoFactorEnabledModel model)
 {
     return(await _apiHelper.PostAsync(model, "api/Account/Manage/SetTwoFactorEnabled"));
 }