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)); }
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()); }
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" }); }