public async Task <IActionResult> Login([FromBody] LoginParametersDto loginParametersDto)
        {
            IdentityCard card = await _cardManager.FindByIdAsync(loginParametersDto.CardNumber);

            // check null card
            if (card == null)
            {
                return(NotFound("please register your card"));
            }

            // check password
            var passwordCorrect = await _cardManager.CheckPasswordAsync(card, loginParametersDto.Pin);

            if (!passwordCorrect)
            {
                return(Unauthorized("pin incorrect"));
            }

            var refreshToken = _tokenManager.CreateRefreshToken(loginParametersDto.CardNumber);
            var cardDto      = _mapper.Map <CardDto>(card);

            cardDto.Bearer       = _tokenManager.CreateJwt(loginParametersDto.CardNumber);
            cardDto.RefreshToken = null;
            if (await _tokenManager.SaveRefreshToken(refreshToken))
            {
                cardDto.RefreshToken = refreshToken.Token;
            }
            return(Ok(cardDto));
        }
Example #2
0
        public async Task ClientSendsLoginInfo_WithRegisteredCardAndIncorrectPin_ReturnsUnauthorised()
        {
            // Arrange
            var subject = GetSubject();
            var pin     = "1234";
            var card    = _identityCardBuilder.GenericIdentityCard().Build();

            card.Id = "cutbgln213454hbv";
            _mockCardManager.Setup(x => x.FindByIdAsync(card.Id)).ReturnsAsync(card);
            _mockCardManager.Setup(x => x.CheckPasswordAsync(card, pin)).ReturnsAsync(false);
            var loginParameters = new LoginParametersDto()
            {
                CardNumber = card.Id,
                Pin        = pin
            };

            // Act
            var result = await subject.Login(loginParameters);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(typeof(UnauthorizedObjectResult), result.GetType());
            var resultObject = result as UnauthorizedObjectResult;

            Assert.Equal("pin incorrect", resultObject.Value);
        }
        public async Task Post_login_ok()
        {
            // Arrange
            var client = _factory.CreateClient();

            // register
            var registerDto = new CardRegistrationDto()
            {
                CardNumber  = "123be4qs6ou9oiuy",
                EmployeeId  = "127856",
                FirstName   = "test",
                LastName    = "rodeo",
                PhoneNumber = "07945832712",
                Email       = "*****@*****.**",
                Pin         = "5678"
            };
            var registerJson        = JsonConvert.SerializeObject(registerDto);
            var registerBuffer      = System.Text.Encoding.UTF8.GetBytes(registerJson);
            var registerByteContent = new ByteArrayContent(registerBuffer);

            registerByteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var registerResult =
                client.PostAsync("/authentication/register", registerByteContent).Result;

            // login card
            var loginDto = new LoginParametersDto()
            {
                CardNumber = registerDto.CardNumber,
                Pin        = registerDto.Pin
            };
            var loginJson        = JsonConvert.SerializeObject(loginDto);
            var loginBuffer      = System.Text.Encoding.UTF8.GetBytes(loginJson);
            var loginByteContent = new ByteArrayContent(loginBuffer);

            loginByteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            if (registerResult.IsSuccessStatusCode)
            {
                // Act
                var response = client.PostAsync("/authentication/login", loginByteContent).Result;

                // Assert
                Assert.True(response.StatusCode == HttpStatusCode.OK);
            }
            else
            {
                Assert.True(registerResult.IsSuccessStatusCode);
            }
        }
Example #4
0
        public async Task ClientSendsLoginInfo_WithRegisteredCardAndCorrectPin_LogsUserInAndReturnsCardDto()
        {
            // Arrange
            var          subject           = GetSubject();
            const string pin               = "1234";
            const string jwt               = "mock1jwt";
            var          refreshTokenValue = "mock1refreshToken";
            var          card              = _identityCardBuilder.GenericIdentityCard().Build();

            card.Id = "cutbgln213454hbv";
            _mockCardManager.Setup(x => x.FindByIdAsync(card.Id)).ReturnsAsync(card);
            _mockCardManager.Setup(x => x.CheckPasswordAsync(card, pin)).ReturnsAsync(true);
            var loginParameters = new LoginParametersDto()
            {
                CardNumber = card.Id,
                Pin        = pin
            };
            var cardDto = new CardDto()
            {
                CardNumber = card.Id,
                FullName   = card.FullName,
            };
            var refreshToken = new RefreshToken()
            {
                Token = refreshTokenValue
            };

            _mockMapper.Setup(x => x.Map <CardDto>(card)).Returns(cardDto);
            _mockTokenManager.Setup(x => x.CreateJwt(card.Id)).Returns(jwt);
            _mockTokenManager.Setup(x => x.CreateRefreshToken(card.Id)).Returns(refreshToken);
            _mockTokenManager.Setup(x => x.SaveRefreshToken(refreshToken)).ReturnsAsync(true);
            // Act
            var result = await subject.Login(loginParameters);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(typeof(OkObjectResult), result.GetType());
            var okObject = result as OkObjectResult;

            Assert.Equal(typeof(CardDto), okObject.Value.GetType());
            var resultCardDto = (CardDto)okObject.Value;

            Assert.Equal(card.FullName, resultCardDto.FullName);
            Assert.Equal(card.Id, resultCardDto.CardNumber);
            Assert.Equal(jwt, resultCardDto.Bearer);
            Assert.Equal(refreshTokenValue, resultCardDto.RefreshToken);
        }
Example #5
0
        public async Task ClientCallsLogin_WithUnregisteredCard_ReturnsNotfound()
        {
            // Arrange
            var subject    = GetSubject();
            var cardNumber = "cutbgln213454hbv";

            _mockCardManager.Setup(x => x.FindByIdAsync(cardNumber)).ReturnsAsync((IdentityCard)null);
            var loginParameters = new LoginParametersDto();

            // Act
            var result = await subject.Login(loginParameters);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(typeof(NotFoundObjectResult), result.GetType());
            Assert.Equal("please register your card", (result as NotFoundObjectResult).Value);
        }
        public async Task Post_login_notFound()
        {
            // Arrange
            var client   = _factory.CreateClient();
            var loginDto = new LoginParametersDto()
            {
                CardNumber = "1234ewqs6789o88y",
                Pin        = "5678"
            };
            var loginJson        = JsonConvert.SerializeObject(loginDto);
            var loginBuffer      = System.Text.Encoding.UTF8.GetBytes(loginJson);
            var loginByteContent = new ByteArrayContent(loginBuffer);

            loginByteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            // Act
            var response = await client.PostAsync("/authentication/login", loginByteContent);

            // Assert
            Assert.True(response.StatusCode == HttpStatusCode.NotFound);
        }