public Users AddUser(AddUserCommand user) { using (var db = _paintStoreContext) { if (db.Users.Any(x => x.Email == user.Email)) { throw new DuplicateEmailException(); } if (db.Users.Any(x => x.Name == user.Name)) { throw new DuplicateNameException(); } var newUser = new Users() { Email = user.Email, Name = user.Name, Link = user.Name.ToLower(), About = "" }; newUser.PasswordSoil = CredentialsHelpers.CreateSalt(); var encoding = new ASCIIEncoding(); var soil = encoding.GetBytes(newUser.PasswordSoil); var password = encoding.GetBytes(user.Password); newUser.PasswordHash = Convert.ToBase64String(CredentialsHelpers.GenerateSaltedHash(password, soil)); db.Users.Add(newUser); db.SaveChanges(); return(newUser); } }
public Users EditUserCredentials(EditUserCredentialsCommand account) { using (var db = _paintStoreContext) { _signInService.SignInCheck(new SignInCommand { Email = account.OldEmail, Password = account.OldPassword }, db); var accountToUpdate = db.Users.First(x => x.Id == account.Id); if (account.NewEmail != null) { accountToUpdate.Email = account.NewEmail; } if (account.NewPassword != null) { if (account.NewPassword.Length < 8) { throw new BadPasswordException(); } accountToUpdate.PasswordSoil = CredentialsHelpers.CreateSalt(); var encoding = new ASCIIEncoding(); var soil = encoding.GetBytes(accountToUpdate.PasswordSoil); var password = encoding.GetBytes(account.NewPassword); accountToUpdate.PasswordHash = Convert.ToBase64String(CredentialsHelpers.GenerateSaltedHash(password, soil)); } accountToUpdate.Token = CredentialsHelpers.CreateSalt(); db.SaveChanges(); return(accountToUpdate); } }
public SignInResult SignInCheck(SignInCommand signInCommand, PaintStoreContext db) { var userToSignIn = db.Users.FirstOrDefault(x => x.Email == signInCommand.Email); if (userToSignIn == null) { throw new UnauthorizedAccessException(); } var soil = _encoding.GetBytes(userToSignIn.PasswordSoil); var passwordBytes = _encoding.GetBytes(signInCommand.Password); var soiledPassword = Convert.ToBase64String(CredentialsHelpers.GenerateSaltedHash(passwordBytes, soil)); if (soiledPassword != userToSignIn.PasswordHash) { throw new UnauthorizedAccessException(); } if (userToSignIn.Token == null) { userToSignIn.Token = CredentialsHelpers.CreateSalt(); return(new SignInResult() { UserId = userToSignIn.Id, Token = userToSignIn.Token }); } else { return(new SignInResult() { UserId = userToSignIn.Id, Token = userToSignIn.Token }); } }
private string GenerateHashedPassword(Users user, string passwordToSet) { var encoding = new ASCIIEncoding(); var soil = encoding.GetBytes(user.PasswordSoil); var password = encoding.GetBytes(passwordToSet); return(Convert.ToBase64String(CredentialsHelpers.GenerateSaltedHash(password, soil))); }
public bool SignOut(SignOutCommand signOutCommand) { try { using (var db = _paintStoreContext) { var userToSignOut = db.Users.First(x => x.Id == signOutCommand.UserId); userToSignOut.Token = CredentialsHelpers.CreateSalt(); db.SaveChanges(); } return(true); } catch (Exception) { return(false); } }