public async Task <Status> Register(RegisterModel registerModel, CancellationToken cancellationToken) { var user = _passwordWalletContext.Users.Any(u => u.Login == registerModel.Login); if (user) { return(CreateStatus(false, string.Format("User with login {0} exist", registerModel.Login))); } var salt = Guid.NewGuid().ToString(); var passwordHash = PreapreHashPassword(registerModel.Password, salt, registerModel.IsPasswordKeptAsHash); var newUser = new User { Id = Guid.NewGuid(), PasswordHash = passwordHash, Salt = salt, IsPasswordKeptAsHash = registerModel.IsPasswordKeptAsHash, Login = registerModel.Login }; var function = await _passwordWalletContext.Functions.FirstOrDefaultAsync(x => x.Name == FunctionName.Auth.SignUp, cancellationToken); await LogFunction(function.Id, newUser.Id, cancellationToken); await _passwordWalletContext.AddAsync(newUser, cancellationToken); await _passwordWalletContext.SaveChangesAsync(cancellationToken); return(CreateStatus(true, "Succesfully sign up")); }
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" }); }