Beispiel #1
0
        public async Task <TwoFactorResponseModel> PutTwoFactor([FromBody] UpdateTwoFactorRequestModel model)
        {
            var user = await _userService.GetUserByPrincipalAsync(User);

            if (!await _userManager.CheckPasswordAsync(user, model.MasterPasswordHash))
            {
                await Task.Delay(2000);

                throw new BadRequestException("MasterPasswordHash", "Invalid password.");
            }

            if (!await _userManager.VerifyTwoFactorTokenAsync(user, TwoFactorProviderType.Authenticator.ToString(), model.Token))
            {
                await Task.Delay(2000);

                throw new BadRequestException("Token", "Invalid token.");
            }

            user.TwoFactorProvider     = TwoFactorProviderType.Authenticator;
            user.TwoFactorEnabled      = model.Enabled.Value;
            user.TwoFactorRecoveryCode = user.TwoFactorEnabled ? Guid.NewGuid().ToString("N") : null;
            await _userService.SaveUserAsync(user);

            var response = new TwoFactorResponseModel(user);

            return(response);
        }
        public async Task <TwoFactorResponseModel> PutTwoFactor([FromBody] UpdateTwoFactorRequestModel model)
        {
            var user = _currentContext.User;

            if (!await _userManager.CheckPasswordAsync(user, model.MasterPasswordHash))
            {
                await Task.Delay(2000);

                throw new BadRequestException("MasterPasswordHash", "Invalid password.");
            }

            if (model.Enabled.Value && !await _userManager.VerifyTwoFactorTokenAsync(user, "Authenticator", model.Token))
            {
                await Task.Delay(2000);

                throw new BadRequestException("Token", "Invalid token.");
            }

            user.TwoFactorProvider = TwoFactorProvider.Authenticator;
            user.TwoFactorEnabled  = model.Enabled.Value;
            await _userService.SaveUserAsync(user);

            var response = new TwoFactorResponseModel(user);

            return(response);
        }