示例#1
0
        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");
        }
示例#3
0
        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());
            }
        }
示例#4
0
        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));
        }
示例#9
0
        public async Task <IHttpActionResult> Post(LogInUserCommand command)
        {
            var result = await _commandHandler.ExecuteAsync(command);

            return(ProcessResult(result));
        }