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()); }
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 ))); } }