示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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.");
            }
        }
示例#4
0
        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);
            });
        }
示例#5
0
        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);            
        }
示例#6
0
        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" });
            });
        }
示例#7
0
        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);
        }
示例#8
0
        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);
            });
        }
示例#9
0
        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);
            });
        }
示例#10
0
        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());
        }