public async Task <LogInUserResponse> Handle(LogInUserCommand cmd) { var member = (await teamRepository.GetMembers(userName: cmd.UserName, includeStatuses: activeOnlyStatus)).SingleOrDefault(); if (member == null) { return new FailedLogin { Reason = $"User {cmd.UserName} not found" } } ; if (member.ExternalUserId != null && member.ExternalUserId != cmd.UserId) { throw new BusinessLogicException($"User {cmd.UserName} has external id {member.ExternalUserId} but trying to log in with user id {cmd.UserId}"); } if (member.ExternalUserId == null && member.LastSuccessfulLogin.HasValue) { throw new BusinessLogicException($"User {cmd.UserName} has no external id but somehow logged in already"); } if (!member.LastSuccessfulLogin.HasValue || string.IsNullOrEmpty(member.ExternalUserId)) { member.ExternalUserId = cmd.UserId; } member.LastSuccessfulLogin = DateTime.UtcNow; await teamRepository.SaveMember(member); return(new SuccessfulLogin { Profile = mapper.Map <UserProfile>(member) }); }
public void LogInUserCommandHandler_Fails_For_Nonexistent_User() { var handler = new LogInUserCommandHandler(_repository); var command = new LogInUserCommand("*****@*****.**", "test"); var result = handler.Execute(command); result.Errors.Should().HaveCount(1); result.Errors[0].Expression.Should().BeNull(); result.Errors[0].Message.Should().Be("Invalid email or password"); }
public void Handle(LogInUserCommand command) { User user = repo.GetById <User>(command.Id); //using (var stream = store.OpenStream(user.Id, 0, int.MaxValue)) using (var stream = store.OpenStream(Guid.NewGuid(), 0, int.MaxValue)) { // Extra-Domain Event var @event = new LoggedInUserEvent(user.Id, command.Date); //stream.UncommittedHeaders[AggregateTypeHeader] = mementoType.FullName.Replace("Memento", ""); stream.Add(new EventMessage { Body = @event }); stream.CommitChanges(Guid.NewGuid()); } }
public async Task <ActionResult <LogInResponse> > LogIn([FromBody] LogInRequest request) { var command = new LogInUserCommand { UserName = request.UserName, Password = request.Password }; var token = await Mediator.Send(command); var response = new LogInResponse { Token = token.Value, UserId = token.UserId }; return(this.Ok(response)); }
public void LogInUserCommandHandler_Succeeds() { var handler = new LogInUserCommandHandler(_repository); var command = new LogInUserCommand("*****@*****.**", "test"); var user = Substitute.For <User>(); user.Email.Returns("*****@*****.**"); user.Password.Returns(new Password("test")); user.Status.Returns(UserStatus.Active); _context.Users.Add(user); var result = handler.Execute(command); result.Success.Should().BeTrue(); user.Received().LogIn(); user.DidNotReceive().LogInFailed(); }
public async Task <CommandReturn> ExecuteAsync(LogInUserCommand command) { if (command == null) { return(Error(Messages.InvalidCommand)); } var emailValidationResult = _emailValidator.Validate(new Email(command.Email)); if (!emailValidationResult.IsValid) { return(Error(emailValidationResult)); } var user = await _service.GetByEmailAsync(command.Email); if (user == null) { // Como o email não existe, retornar UserOrPassNotValid return(Error(Messages.UserOrPassNotValid)); } if (!user.PasswordValidation(command.Password)) { // Como a senha não confere, retornar UserOrPassNotValid e (401) Unauthorized return new CommandReturn(Messages.UserOrPassNotValid) { ErrorCode = HttpStatusCode.Unauthorized } } ; var result = await _service.GravarLoginAsync(user); if (result.Failed) { return(result); } var output = new UserMapper().OutputFrom(user); return(Success(output)); } }
public void LogInUserCommandHandler_Fails_For_Invalid_Password() { var handler = new LogInUserCommandHandler(_repository); var command = new LogInUserCommand("*****@*****.**", "wrong"); var user = Substitute.For <User>(); user.Email.Returns("*****@*****.**"); user.Password.Returns(new Password("test")); user.Status.Returns(UserStatus.Active); _context.Users.Add(user); var result = handler.Execute(command); result.Errors.Should().HaveCount(1); result.Errors[0].Expression.Should().BeNull(); result.Errors[0].Message.Should().Be("Invalid email or password"); user.DidNotReceive().LogIn(); user.Received().LogInFailed(); }
public async Task <Response <string> > LogIn([FromBody] UserModel user) { var command = new LogInUserCommand(user); return(await _mediator.Send(command)); }
public async Task <IHttpActionResult> Post(LogInUserCommand command) { var result = await _commandHandler.ExecuteAsync(command); return(ProcessResult(result)); }