public async Task <ServiceResponseData> AddPasswordAsync(AddPasswordModel model)
        {
            var responseData = new ServiceResponseData();

            try
            {
                if (string.IsNullOrEmpty(model.Email))
                {
                    throw new Exception("Email NOT found");
                }

                if (!string.Equals(model.Password, model.ConfirmPassword))
                {
                    throw new Exception("Confirm password does't match the password");
                }
                var user = await _userManager.FindByEmailAsync(model.Email);

                var result = await _userManager.AddPasswordAsync(user, model.Password);

                if (!result.Succeeded)
                {
                    throw new Exception(result.Errors.FirstOrDefault().Description);
                }

                await _signInManager.SignInAsync(user, isPersistent : false);
            }
            catch (Exception ex)
            {
                responseData.ErrorMessage = ex.ProcessException(_errorService);
                responseData.IsSuccess    = false;
            }

            return(await Task.FromResult(responseData));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> AddPassword([FromBody] AddPasswordModel addPasswordModel, CancellationToken cancellationToken)
        {
            var identity = HttpContext.User.Identity as ClaimsIdentity;

            if (identity != null)
            {
                var login  = identity.FindFirst(JwtRegisteredClaimNames.GivenName).Value;
                var result = await _walletService.AddNewPassowrd(addPasswordModel, login, cancellationToken);

                return(Ok(result));
            }

            return(BadRequest());
        }
Exemplo n.º 3
0
        public async Task <Status> AddNewPassowrd(AddPasswordModel addPasswordModel, string login, CancellationToken cancellationToken)
        {
            var user = _passwordWalletContext.Users.FirstOrDefault(user => user.Login == login);

            if (user == null)
            {
                return(new Status(false, "User not exist"));
            }

            var function = await _passwordWalletContext.Functions.FirstOrDefaultAsync(x => x.Name == FunctionName.Wallet.AddPassword, cancellationToken);

            await LogFunction(function.Id, user.Id, cancellationToken);

            _memoryCache.TryGetValue(string.Format("Password for {0}", login), out string passwordHash);
            if (passwordHash == null)
            {
                return(new Status
                {
                    Success = false,
                    Messege = "Can't find user"
                });
            }
            var password = SymmetricEncryptor.EncryptString(addPasswordModel.Password, passwordHash);

            var passwordWallet = new Password
            {
                Login         = addPasswordModel.Login,
                Description   = addPasswordModel.Description,
                PasswordValue = password,
                WebAddress    = addPasswordModel.WebPage,
                UserId        = user.Id,
            };

            await _passwordWalletContext.AddAsync(passwordWallet, cancellationToken);

            await _passwordWalletContext.SaveChangesAsync(cancellationToken);

            var actionChanges = new DataChange
            {
                UserId        = user.Id,
                PreviousValue = null,
                CurrentValue  = JsonConvert.SerializeObject(new Password
                {
                    Id            = passwordWallet.Id,
                    IsDeleted     = passwordWallet.IsDeleted,
                    Login         = passwordWallet.Login,
                    Description   = passwordWallet.Description,
                    PasswordValue = passwordWallet.PasswordValue,
                    UserId        = passwordWallet.UserId,
                    WebAddress    = passwordWallet.WebAddress,
                }),
                ActionType = ActionType.CREATE,
                RecordId   = passwordWallet.Id,
                UpdatedAt  = DateTime.Now,
            };
            await _passwordWalletContext.AddAsync(actionChanges, cancellationToken);

            await _passwordWalletContext.SaveChangesAsync(cancellationToken);

            return(new Status
            {
                Success = true,
                Messege = "Added new password"
            });
        }