예제 #1
0
        public override async Task <SignInReply> SignInByEmail(SignInByEmailRequest request, ServerCallContext context)
        {
            var command = new SignInByEmailCommand(
                new EmailIdentity(request.Email),
                request.Password,
                ParseIpAddress(request.Ip)
                );
            var data = await _mediator.Send(command, context.CancellationToken);

            return(data.ToSignInReply());
        }
예제 #2
0
        public async Task SignInByEmailShouldBeSucceed()
        {
            /* insert data directly */
            var expectedUser = UserFactory.GenerateUserUsingEmail();

            expectedUser = await _persistenceFixture.InjectUser(expectedUser);

            var dateTimeBeforeSignIn = DateTime.UtcNow;

            /* get the data using service */

            var requestBodyObject = new SignInByEmailRequest
            {
                Email    = expectedUser.Email,
                Password = UserFactory.DefaultPassword
            };

            var content = new StringContent(JsonConvert.SerializeObject(requestBodyObject), Encoding.UTF8, "application/json");

            var httpResponse = await _apiFixture.Client.PostAsync(_apiFixture.ApplicationSettings.AuthServiceAPISettings.SignInByEmailUrl, content);

            httpResponse.EnsureSuccessStatusCode();

            var actualTokenReponse = JsonConvert.DeserializeObject <TokenResponse>(
                await httpResponse.Content.ReadAsStringAsync());

            /* check if the actual data from decoded accessToken is equal to expected data */

            Assert.NotNull(actualTokenReponse);
            Assert.NotNull(actualTokenReponse.AccessToken);

            var accessTokenResult = _apiFixture.ValidateToken(actualTokenReponse.AccessToken);

            Assert.Equal(AccessTokenStatus.Valid, accessTokenResult.Status);
            Assert.Equal(expectedUser.Id.ToString(), accessTokenResult.Principal.GetUserId());
            Assert.Equal(expectedUser.FullName, accessTokenResult.Principal.Identity.Name);

            /* get data directly */
            var lastLoginUsingEmail = _persistenceFixture.GetUser(expectedUser.Id)?.LastLoginUsingEmail;

            /* ensure the last login using email datetime is updated */
            Assert.True(lastLoginUsingEmail > dateTimeBeforeSignIn);
        }
        public async Task <IActionResult> SignInByEmailAsync(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "sign-in-by-email")] HttpRequest req,
            ILogger log)
        {
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

            var signInByEmailRequest = JsonConvert.DeserializeObject <SignInByEmailRequest>(requestBody);

            var invalidParameters = new SignInByEmailRequest();

            Email    email    = null;
            Password password = null;

            try
            {
                email = signInByEmailRequest.Email;
            }
            catch (ParameterException e)
            {
                invalidParameters.Email = e.Message;
            }

            try
            {
                password = signInByEmailRequest.Password;
            }
            catch (ParameterException e)
            {
                invalidParameters.Password = e.Message;
            }

            if (email == null ||
                password == null)
            {
                return(new BadRequestObjectResult(
                           new ErrorParametersResponse
                {
                    InvalidParametersObject = invalidParameters
                }));
            }

            try
            {
                var token = await _signInUseCase.SignInByEmail(
                    email : email,
                    password : password);

                return(new OkObjectResult(TokenResponse.Load(token)));
            }
            catch (UnauthorizedException)
            {
                return(new UnauthorizedResult());
            }
            catch (DomainException e)
            {
                return(new BadRequestObjectResult(
                           ErrorResponse.BadRequest(
                               message: e.Message
                               )));
            }
        }