public async Task Jwt_Contains_CorrectId() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var registerCommand = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; // maak user aan string id = await listener.RegistreerGebruiker(registerCommand); var loginCommand = new LogGebruikerInCommand() { Credentials = new Credentials() { UserName = "******", Password = "******" } }; var result = await listener.LogGebruikerIn(loginCommand); var jwtHandler = new JwtSecurityTokenHandler(); bool validToken = jwtHandler.CanReadToken(result.Token); Assert.IsTrue(validToken); var token = jwtHandler.ReadJwtToken(result.Token); var idFromClaim = token.Claims.Where(c => c.Type == "UserId" && c.Value == id).SingleOrDefault(); Assert.AreEqual(id, idFromClaim.Value); }
public async Task Jwt_Contains_CorrectRoles() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var registerCommand = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; // maak user aan await listener.RegistreerGebruiker(registerCommand); var loginCommand = new LogGebruikerInCommand() { Credentials = new Credentials() { UserName = "******", Password = "******" } }; var result = await listener.LogGebruikerIn(loginCommand); var jwtHandler = new JwtSecurityTokenHandler(); bool validToken = jwtHandler.CanReadToken(result.Token); Assert.IsTrue(validToken); var token = jwtHandler.ReadJwtToken(result.Token); var role = token.Claims.Where(c => c.Type == ClaimTypes.Role && c.Value == "Klant"); Assert.IsNotNull(role); }
public async Task <string> RegistreerGebruiker(RegistreerGebruikerCommand registreerGebruikerCommand) { // Email = username var username = registreerGebruikerCommand.NewUser.UserName; var newUser = new IdentityUser() { UserName = username, Email = username }; var newUserResult = await _userManager.CreateAsync(newUser, registreerGebruikerCommand.NewUser.Password); if (newUserResult.Succeeded) { await _userManager.AddToRoleAsync(newUser, Roles.Klant); string id = await _userManager.GetUserIdAsync(newUser); _logger.LogInformation("New user created. Username: {username}, ID: {id} ", username, id); return(id); } else { foreach (var error in newUserResult.Errors) { switch (error.Code) { case "PasswordTooShort": case "PasswordRequiresNonAlphanumeric": case "PasswordRequiresLower": case "PasswordRequiresUpper": case "PasswordRequiresDigit": throw new PasswordException("Password not valid."); case "DuplicateUserName": throw new UsernameAlreadyExistsException("Duplicate username."); default: _logger.LogWarning("Account creation failed for user {username}", username); throw new AccountCreationException("Something went wrong."); } } _logger.LogWarning("Account creation failed for user {username}", username); throw new AccountCreationException("Something went wrong."); } }
public async Task ThrowsPasswordException_WhenPassword_IsInvalid() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var command = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; await Assert.ThrowsExceptionAsync<PasswordException>(async () => { await listener.RegistreerGebruiker(command); }); }
public async Task NewUser_CanBe_Registered() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var command = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; var result = await listener.RegistreerGebruiker(command); Assert.IsNotNull(result); }
public async Task ThrowsException_When_CantDeleteUser() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var command = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; // maak user aan string id = await listener.RegistreerGebruiker(command); await Assert.ThrowsExceptionAsync<UserDeletionFailedException>(async () => { await listener.VerwijderGebruiker(new VerwijderGebruikerCommand() { Id = "wrongId" }); }); }
public async Task CanSuccesfully_Delete_AnUser() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var command = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; // maak user aan string id = await listener.RegistreerGebruiker(command); var result = await listener.VerwijderGebruiker(new VerwijderGebruikerCommand() { Id = id }); Assert.AreEqual(id, result); }
public async Task ThrowsUdernameAlreadyExistsException_WhenUsernameAlreadyExists() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var command = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; // eerste users await listener.RegistreerGebruiker(command); // tweede dubbele user await Assert.ThrowsExceptionAsync<UsernameAlreadyExistsException>(async () => { await listener.RegistreerGebruiker(command); }); }
public async Task ThrowException_WhenWrongPassword() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var registerCommand = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; // maak user aan await listener.RegistreerGebruiker(registerCommand); var loginCommand = new LogGebruikerInCommand() { Credentials = new Credentials() { UserName = "******", Password = "******" } }; await Assert.ThrowsExceptionAsync<LoginFailedException>(async () => { await listener.LogGebruikerIn(loginCommand); }); }
public async Task GeneratesJwt_WhenSuccesfullLogin() { AccountCommandListener listener = new AccountCommandListener(_signInManager, _userManager); var registerCommand = new RegistreerGebruikerCommand() { NewUser = new Account() { UserName = "******", Password = "******", Role = "Klant" } }; // maak user aan await listener.RegistreerGebruiker(registerCommand); var loginCommand = new LogGebruikerInCommand() { Credentials = new Credentials() { UserName = "******", Password = "******" } }; var result = await listener.LogGebruikerIn(loginCommand); Assert.IsNotNull(result); }
public async Task <IActionResult> RegistreerKlant(Klant klant) { var registreerKlantCommand = new RegistreerKlantCommand { Voornaam = klant.Voornaam, Achternaam = klant.Achternaam, AdresRegel = klant.AdresRegel, Plaats = klant.Plaats, Postcode = klant.Postcode, Telefoonnummer = klant.Telefoonnummer }; var registreerGebruikerCommand = new RegistreerGebruikerCommand { NewUser = new Account { UserName = klant.Email, Password = klant.Wachtwoord, Role = Roles.Klant } }; try { var registreerGebruikerResult = await _commandPublisher.Publish <string>(registreerGebruikerCommand, NameConstants.RegistreerGebruikerCommandQueue); registreerKlantCommand.AccountId = registreerGebruikerResult; } catch (NoResponseException) { _logger.LogDebug("Authenticatie service unavaible"); return(StatusCode(503, "Service niet bereikbaar.")); } catch (AccountCreationException) { return(StatusCode(409, "Account aanmaken is verkeerd gegaan.")); } catch (PasswordException) { return(StatusCode(412, "Wachtwoord niet sterk genoeg.")); } catch (UsernameAlreadyExistsException) { return(StatusCode(409, "Email bestaat al.")); } try { var registreerKlantResult = await _commandPublisher.Publish <string>(registreerKlantCommand, NameConstants.RegistreerKlantCommandQueue); } catch (NoResponseException) { await RollbackGeregristreerdAccount(registreerKlantCommand.AccountId); _logger.LogDebug("Klantbeheer service unavaible"); return(StatusCode(503)); } catch (Exception) { await RollbackGeregristreerdAccount(registreerKlantCommand.AccountId); _logger.LogDebug("Account aanmaken mislukt rollback wordt gedaan. Met Accountid : {}", registreerKlantCommand.AccountId); return(StatusCode(500, "Account aanmaken mislukt.")); } return(Ok()); }