public async Task <ActionResult <UserLoginResultDto> > SignIn([FromBody] UserLoginDto user)
        {
            var command = new LoginUserCommand
            {
                Email    = user.Email,
                Password = user.Password
            };

            var loginResult =
                await _mediator.Send(command);

            var result = new UserLoginResultDto
            {
                Email       = loginResult.Email,
                UserId      = loginResult.UserId,
                IsSuccessed = loginResult.IsSucceeded,
                IsLocked    = loginResult.IsLocked
            };

            if (!loginResult.IsSucceeded || loginResult.IsLocked)
            {
                return(result);
            }

            result.Token = _userService.GenerateToken(loginResult.Email);
            return(Ok(result));
        }
        public Task <CommandResult <User> > Handle(LoginUserCommand request, CancellationToken cancellationToken)
        {
            var response = new CommandResult <User>("Login realizado com sucesso", true, null);

            request.Validate();
            if (request.Valid)
            {
                User user = new User(request.Email, request.Senha);
                if (user.Valid)
                {
                    var result = _userRepository.GetAll().FirstOrDefault(x => x.email == request.Email && x.senha == request.Senha);
                    if (result != null)
                    {
                        response.Sucesso        = true;
                        response.ObjetoResposta = result;
                        return(Task.FromResult(response));
                    }
                    else
                    {
                        response.Sucesso  = false;
                        response.Mensagem = "Login ou senha inválidos!";
                        return(Task.FromResult(response));
                    }
                }
                response.Notificacoes.AddRange(user.Notifications.Select(x => x.Message).ToList());
            }
            response.Notificacoes.AddRange(request.Notifications.Select(x => x.Message).ToList());
            response.Sucesso  = false;
            response.Mensagem = "Não foi possível realizar o Login.";
            return(Task.FromResult(response));
        }
Example #3
0
        public async Task <AuthenticationResult> LoginAsync(LoginUserCommand loginUser)
        {
            var user = await _userManager.FindByEmailAsync(loginUser.Email);

            if (user == null)
            {
                return new AuthenticationResult
                       {
                           Errors = new[] { "User does not exist" }
                       }
            }
            ;

            var userHasValidPassword = await _userManager.CheckPasswordAsync(user, loginUser.Password);

            if (!userHasValidPassword)
            {
                return new AuthenticationResult
                       {
                           Errors = new[] { "User/password combination is wrong" }
                       }
            }
            ;

            return(await GenerateAuthenticationResultForUserAsync(user));
        }
        public UserViewModel()
        {
            this.user = new User("bob", "123");
            LoginCommand = new LoginUserCommand(this);
            NewUserCommand = new CreateUserCommand(new UserCreationViewModel());

        }
        public GetLoggedUserResult Handle(LoginUserCommand command)
        {
            _repository.MockDataCreator(); //note: comment THIS LINE to avoid the creation of FAKE MockData

            command.Validate();
            if (command.Invalid)
            {
                return(new GetLoggedUserResult(false, "Cannot login because invalid information", "", "", "", "", null));
            }

            var user = _repository.GetByLogin(command.UserName);

            if (user == null)
            {
                return(new GetLoggedUserResult(false, "Cannot find UserName or Password", "", "", "", "", null));
            }

            if (!user.UserAccount.Authenticate(command.UserName, command.Password))
            {
                return(new GetLoggedUserResult(false, "Cannot find UserName or Password", "", "", "", "", null));
            }

            // If pass, user was authenticated, so i need to get the claims
            var           userClaim = _userClaimRepository.GetByUser(user);
            List <string> Claims    = new List <string>();

            foreach (UserClaim item in userClaim)
            {
                Claims.Add(item.Claim.ClaimName);
            }

            //TO-DO: Need to load the CLAIMS here and return on Obj instead of user
            return(new GetLoggedUserResult(true, "Logged with Success.", user.Id.ToString(), user.Name.ToString(), user.Email.EmailAddress.ToString(), user.UserAccount.UserName, Claims));
        }
Example #6
0
        public IActionResult Login([FromBody] LoginUserCommand user)
        {
            if (user == null)
            {
                return(BadRequest("Invalid client request"));
            }

            var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["AppSettings:SecretKey"]));
            //IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["AppSettings:JwtKey"])),
            var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256Signature);

            var claims = new List <Claim>
            {
                new Claim(ClaimTypes.Name, user.Email),
            };

            var tokeOptions = new JwtSecurityToken(
                _configuration["Issuer"],
                _configuration["Audiance"],
                claims,
                expires: DateTime.Now.AddMinutes(5),
                signingCredentials: signinCredentials
                );
            var tokenString = new JwtSecurityTokenHandler().WriteToken(tokeOptions);

            return(Ok(new { Token = tokenString }));
        }
        public async Task <Result <LoginOutputModel> > Login(LoginUserCommand userInput)
        {
            var user = await userManager.FindByEmailAsync(userInput.Email);

            if (user == null)
            {
                return(IdentityErrors.InvalidLogin);
            }

            var passwordValid = await userManager.CheckPasswordAsync(user, userInput.Password);

            if (!passwordValid)
            {
                return(IdentityErrors.InvalidLogin);
            }

            var userRoles = await this.userManager.GetRolesAsync(user);

            var claimRoles = new List <Claim>();

            if (userRoles.Any())
            {
                foreach (var roleName in userRoles)
                {
                    claimRoles.Add(new Claim(ClaimTypes.Role, roleName));
                }
            }

            var token = jwtTokenGenerator.GenerateToken(user, claimRoles);

            return(new LoginOutputModel(token));
        }
Example #8
0
        public async Task <IActionResult> Login(LoginUserCommand model)
        {
            var result = await this.Mediator.Send(model);

            this.SetCookies(result.Data.Token, result.Data.RefreshToken.ToString());
            return(this.Ok(result));
        }
        public async Task InputDataIsok_Executed_LoginUserViewModel()
        {
            var fixture        = new Fixture();
            var userRepository = new Mock <IUserRepository>();
            var authService    = new Mock <IAuthService>();

            var user = new User(1, "abc", "*****@*****.**", "123", "admin");

            var userEmail    = user.Email;
            var userPassword = user.Password;

            userRepository.Setup(u => u.GetUserByEmailAndPasswordAsync(user.Email, user.Password))
            .Returns(ConverUserInTaskUser(user));

            authService.Setup(u => u.ComputeSha256Hash(user.Password)).Returns(user.Password);
            authService.Setup(u => u.GenerateJwtToken(user.Email, user.Role)).Returns("asdasfsdfkjldhl");

            var loginUserCommand = new LoginUserCommand(userEmail, userPassword);

            var loginUserCommandHandler = new LoginUserCommandHandler(authService.Object, userRepository.Object);

            var userViewModel = await loginUserCommandHandler.Handle(loginUserCommand, new System.Threading.CancellationToken());

            Assert.IsType <LoginUserViewModel>(userViewModel);
            Assert.NotNull(userViewModel.Token);
            Assert.NotEmpty(userViewModel.Token);

            userRepository.Verify(g => g.GetUserByEmailAndPasswordAsync(userEmail, userPassword), Times.Once);
            authService.Verify(g => g.ComputeSha256Hash(user.Password), Times.Once);
            authService.Verify(g => g.GenerateJwtToken(user.Email, user.Role), Times.Once);
        }
Example #10
0
        public async Task LoginAsyncSignInSuccessedCreateJwtToken(UserTypeEnum userType)
        {
            var command = new LoginUserCommand()
            {
                Email    = _faker.Person.Email,
                Password = _faker.Internet.Password(),
                TokenId  = _faker.Random.Guid()
            };

            var userName = UserHelper.GetUserName(userType, command.Email);

            var user = new User()
            {
                Id = 1
            };

            var jwtToken = "";

            _userManagerMock.Setup(x => x.FindByNameAsync(userName)).ReturnsAsync(user);
            _signInManagerMock.Setup(x => x.PasswordSignInAsync(user, command.Password, false, false)).ReturnsAsync(SignInResult.Success);
            _jwtHandlerMock.Setup(x => x.CreateToken(user.Id, userType.ToString())).Returns(jwtToken);

            var err = await Record.ExceptionAsync(async() => await _userService.LoginAsync(userType, command));

            err.Should().BeNull();

            _signInManagerMock.Verify(x => x.PasswordSignInAsync(user, command.Password, false, false), Times.Once);
            _jwtHandlerMock.Verify(x => x.CreateToken(user.Id, userType.ToString()), Times.Once);
        }
Example #11
0
        public async Task <IActionResult> Login([FromBody] LoginUserCommand command)
        {
            Logger.LogInformation("{Message} {Username}", "Trying to login user", command.Username);
            var result = await Mediator.Send(command);

            if (!result.IsSucceeded)
            {
                Logger.LogWarning("{Message} {ErrorMessage} {Username} ",
                                  "Failed at login user", result.Errors.Values, command.Username);
                return(GetResponse(result));
            }

            var userData = result.Data;
            var response = new ApiLoginResponse
            {
                Id       = userData.Id,
                Username = userData.Username,
                Email    = userData.Email,
                Token    = _tokenGenerator.GenerateTokenForUser(userData)
            };

            Logger.LogInformation("{Message} {UserId} {Username}",
                                  "Successful login for user", userData.Id, userData.Username);
            return(Ok(response));
        }
Example #12
0
        public async Task <BaseResponse <LoginUserCommandResponse> > LogInAsync(
            [FromBody] LoginUserCommand command)
        {
            var signInResult = await signInManager.PasswordSignInAsync(command.Login, command.Password, true, false);

            if (signInResult.Succeeded)
            {
                var claims = new List <Claim> {
                    new Claim(ClaimsIdentity.DefaultNameClaimType, command.Login)
                };
                var identity  = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                var principal = new ClaimsPrincipal(identity);
                await httpContextAccessor.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);

                var isAdmin = await userService.IsAdmin(command.Login);

                return(new BaseResponse <LoginUserCommandResponse>
                {
                    Result = new LoginUserCommandResponse
                    {
                        Success = true,
                        IsAdmin = isAdmin
                    }
                });
            }
            return(new BaseResponse <LoginUserCommandResponse> {
                Error = "Неверный логин или пароль"
            });
        }
Example #13
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Stopwatch a = new Stopwatch();

            a.Start();
            var data = new LoginUserCommand {
                Email = "*****@*****.**", Password = "******"
            };
            ApiHelper api    = new ApiHelper("https://localhost:44348/");
            var       result = await api.PostAsync <Result <LoginUserViewModel> >("api/Account/login", data);

            var accessToken = result.Data.Token;

            Console.WriteLine(accessToken);
            api.AddJwtAuthorization(accessToken);
            //var allProducts = await apiAuth.GetAsync<Result<IEnumerable<ProductViewModel>>>("api/v1/Product");
            var productOne = await api.GetAsync <Result <ProductViewModel> >("api/v1/Product/1");

            var productTwo = await api.GetAsync <Result <ProductViewModel> >("api/v1/Product/2");

            api.RemoveJwtAuthorization();
            var productThree = await api.GetAsync <Result <ProductViewModel> >("api/v1/Product/3");

            await api.GetAsync <Result <ProductViewModel> >("api/v1/Product/3");

            a.Stop();
            Console.WriteLine(a.ElapsedMilliseconds);
            Console.ReadLine();
        }
        public async Task InputDataIsOk_Executed_ReturnLoginUserViewModel()
        {
            //Arrange
            var loginUserCommand = new LoginUserCommand
            {
                Email    = "*****@*****.**",
                Password = "******"
            };

            var user  = new User("Nome de teste", loginUserCommand.Email, Convert.ToDateTime("15/12/1993"), loginUserCommand.Password, "client");
            var token = "adsadsa5d56asda564das564da5s64d56a4ds456";

            var authServiceMock    = new Mock <IAuthService>();
            var userRepositoryMock = new Mock <IUserRepository>();

            var loginUserCommandHandler = new LoginUserCommandHandler(authServiceMock.Object, userRepositoryMock.Object);

            authServiceMock.Setup(u => u.ComputeSha256Hash(loginUserCommand.Password)).Returns(loginUserCommand.Password);
            authServiceMock.Setup(u => u.GenerateJwtToken(loginUserCommand.Email, user.Role)).Returns(token);
            userRepositoryMock.Setup(u => u.LoginAsync(loginUserCommand.Email, loginUserCommand.Password).Result).Returns(user);

            //Act
            var loginUserViewModel = await loginUserCommandHandler.Handle(loginUserCommand, new CancellationToken());

            //Assert
            Assert.NotNull(loginUserViewModel);

            userRepositoryMock.Verify(u => u.LoginAsync(It.IsAny <string>(), It.IsAny <string>()), Times.Once);
            authServiceMock.Verify(a => a.GenerateJwtToken(It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }
Example #15
0
    public async Task <Result <UserLoggedInDto> > Handle(LoginUserCommand request, CancellationToken cancellationToken)
    {
        var userForLoginDto     = request.UserForLoginDto;
        var wrongPasswordResult = Result <UserLoggedInDto> .Unauthorized("Username or password are wrong.");

        var user = await _repo.GetUserByUserName(userForLoginDto.UserName);

        if (user == null)
        {
            return(wrongPasswordResult);
        }

        bool isPasswordCorrect = user.ValidateIfPasswordIsCorrect(userForLoginDto.Password);

        if (isPasswordCorrect == false)
        {
            return(wrongPasswordResult);
        }

        var userClaims = user.GetClaims();

        var userLoggedInDto = new UserLoggedInDto
        {
            JwtToken = _tokenCreator.GenerateJwtToken(userClaims),
            User     = _mapper.Map <UserForDetailDto>(user)
        };

        return(Result <UserLoggedInDto> .Success(userLoggedInDto));
    }
Example #16
0
        public async Task GivenAUserLoginRequest_WhenUserExistsAndPasswordIsValid_ReturnsUserViewModelAndSuccessfulResponse()
        {
            // Arrange
            var userLoginCommand = new LoginUserCommand
            {
                User = new UserLoginDto
                {
                    Email    = "*****@*****.**",
                    Password = "******"
                }
            };
            var requestContent = ContentHelper.GetRequestContent(userLoginCommand);

            // Act
            var response = await Client.PostAsync(LoginEndpoint, requestContent);

            var responseContent = await ContentHelper.GetResponseContent <UserViewModel>(response);

            // Assert
            response.EnsureSuccessStatusCode();
            responseContent.ShouldNotBeNull();
            responseContent.ShouldBeOfType <UserViewModel>();
            responseContent.User.Email.ShouldBe(userLoginCommand.User.Email);
            responseContent.User.Token.ShouldNotBeEmpty();
        }
Example #17
0
        public async Task <LoginUserResponse> Login(LoginUserCommand loginUserResource)
        {
            try
            {
                var userFromRepository = await _authRepository.Login(loginUserResource.Email.ToLower(), loginUserResource.Password);

                if (userFromRepository != null)
                {
                    //generate token
                    var tokenHandler    = new JwtSecurityTokenHandler();
                    var key             = Encoding.ASCII.GetBytes(_configuration.GetSection("AppSettings:Token").Value);
                    var tokenDescriptor = new SecurityTokenDescriptor
                    {
                        Subject = new ClaimsIdentity(new Claim[] {
                            new Claim(ClaimTypes.NameIdentifier, userFromRepository.Id.ToString()),
                            new Claim(ClaimTypes.Name, userFromRepository.Email)
                        }),
                        Expires            = DateTime.Now.AddHours(1),
                        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha512Signature)
                    };

                    var token       = tokenHandler.CreateToken(tokenDescriptor);
                    var tokenString = tokenHandler.WriteToken(token);

                    return(new LoginUserResponse(userFromRepository, tokenString));
                }

                return(new LoginUserResponse("Unauthorized"));
            }
            catch (Exception ex)
            {
                return(new LoginUserResponse($"An error occurred when loging the user: {ex.Message}"));
            }
        }
Example #18
0
        // [LogAspect(typeof(FileLogger))]
        public async Task <IDataResult <LoginUserResult> > Handle(LoginUserCommand request, CancellationToken cancellationToken)
        {
            // Uygun providerı al ve login ol.
            var provider = coordinator.SelectProvider(request.Provider);

            return(new SuccessDataResult <LoginUserResult>(await provider.Login(request)));
        }
 public ExtendedLoginUserCommand(LoginUserCommand command, string ipAddress)
 {
     this.Email           = command.Email;
     this.Username        = command.Username;
     this.Password        = command.Password;
     this.RemoteIpAddress = ipAddress;
 }
Example #20
0
        public async Task <UserDTO> Login(LoginFilter filter, CancellationToken cancellationToken = default)
        {
            try
            {
                var user = await _userQueryHandler.HandleAsync(filter, cancellationToken);

                if (user == null)
                {
                    throw new ArgumentNullException(nameof(user));
                }

                if (!user.Active)
                {
                    throw new InvalidOperationException("user is currently not active.");
                }

                // create token data
                var tokenData = new TokenData(user.Company, user.Name, user.Email, user.CPF);

                // create and save a token for the logged user
                user.Token = _securityTokenService.CreateToken(tokenData);
                var loginCommand = new LoginUserCommand(user.Id, user.Token);
                await _userCommandHandler.ExecuteAsync(loginCommand, cancellationToken);

                return(user);
            }
            catch (Exception ex)
            { throw ex; }
        }
        public async Task <IActionResult> Post([FromBody] LoginUserCommand command)
        {
            await Send(command);

            var jwt = _cache.GetJwt(command.Email);

            return(Json(jwt));
        }
Example #22
0
        public async Task <IActionResult> RegisterWithInvitation(
            [FromBody] LoginUserCommand command,
            CancellationToken ct)
        {
            await Mediator.Send(command, ct);

            return(Ok("Account created!"));
        }
        public void Have_Validation_Error_When_Password_Is_Null_Or_Empty(string password)
        {
            var expectedCommand = new LoginUserCommand("*****@*****.**", password);

            var actualResult = _sut.TestValidate(expectedCommand);

            actualResult.ShouldHaveValidationErrorFor(user => user.Password.Value);
        }
        public void Have_Validation_Error_When_Email_Is_Null_Or_Empty_Or_Invalid(string email)
        {
            var expectedCommand = new LoginUserCommand(email, "pass");

            var actualResult = _sut.TestValidate(expectedCommand);

            actualResult.ShouldHaveValidationErrorFor(user => user.Email.Value);
        }
Example #25
0
        public async Task LogInAsync(LoginUserCommand command)
        {
            var result = await _client.PostJsonAsync <TokenResponse>("/api/auth/Login", command);

            if (!string.IsNullOrEmpty(result.token))
            {
                await _tokenService.SaveAccessToken(result.token);
            }
        }
Example #26
0
        public async Task <UserLoginData> LoginAsync(LoginUserCommand command)
        {
            var user = await _userRepository.GetWithGroupTeamsAndStudents(command.Email);

            if (user == null)
            {
                throw new AppException("Wrong email or password.", AppErrorCode.VALIDATION_ERROR);
            }

            string generatedHash = _encrypter.GetHash(command.Password, user.Salt);

            if (user.PasswordHash != generatedHash)
            {
                throw new AppException("Wrong email or password.", AppErrorCode.VALIDATION_ERROR);
            }

            JwtDto token    = _jwtHandler.CreateToken(user.Id, user.Role);
            var    userData = new UserLoginData
            {
                Token = token,
                User  = new LoginUser
                {
                    FirstName = user.FirstName,
                    LastName  = user.LastName,
                    Email     = user.Email,
                    Groups    = user.Groups.Select(g => new LoginGroupDto
                    {
                        Id        = g.Id,
                        UserRoles = new List <RoleDto>(),
                        Name      = g.Name,
                        Teams     = g.Teams.Select(t => t.Name).ToList(),
                        UserTeams = g.Teams.Where(t =>
                                                  t.Students.Any(s => s.Id == user.Id))
                                    .Select(t => t.Name).ToList()
                    }).ToList()
                }
            };

            for (int i = 0; i < user.Groups.Count(); i++)
            {
                if (user.Groups.ElementAt(i).Students.Any(s => s.Id == user.Id))
                {
                    userData.User.Groups.ElementAt(i).UserRoles.Add(RoleDto.Student);
                }
                if (user.Groups.ElementAt(i).Moderators.Any(s => s.Id == user.Id))
                {
                    userData.User.Groups.ElementAt(i).UserRoles.Add(RoleDto.Moderator);
                }
                if (user.Groups.ElementAt(i).Administrators.Any(s => s.Id == user.Id))
                {
                    userData.User.Groups.ElementAt(i).UserRoles.Add(RoleDto.Administrator);
                }
            }

            return(userData);
        }
Example #27
0
        public async Task <IActionResult> Handle(LoginUserCommand request)
        {
            var response = await Mediator.Send(request);

            return(Ok(new {
                AccessToken = response.AccessToken,
                RefreshToken = response.RefreshToken,
                Message = "Acceso realizado con éxito"
            }));
        }
        public async Task <IActionResult> Login([FromBody] LoginUserCommand command)
        {
            var result = await Mediator.Send(command);

            if (result.Success)
            {
                return(Ok(result));
            }
            return(BadRequest(result.Errors));
        }
Example #29
0
        public async Task <IActionResult> Login(LoginUserCommand command)
        {
            try {
                var result = await _mediator.Send(command);

                return(Ok(result));
            } catch (Exception e) {
                return(BadRequest(e.Message));
            };
        }
        public async Task <ActionResult <CommandResult <User> > > VerificarUsuario([FromBody] LoginUserCommand command)
        {
            var response = await _mediator.Send(command);

            if (response.Sucesso)
            {
                return(Ok(response));
            }
            return(BadRequest(response));
        }
Example #31
0
        public async Task <IActionResult> Login([FromBody] LoginUserCommand command)
        {
            var loginUserViewModel = await _mediator.Send(command);

            if (loginUserViewModel == null)
            {
                return(BadRequest());
            }
            return(Ok(loginUserViewModel));
        }
Example #32
0
        public void LoginUser_With_Correct_Password_And_Unverified()
        {
            const string email = "*****@*****.**";

            var createCommand = new CreateClientCommand("test", email, "123456", "brag", 3.2342, 23.4545, 1);
            ExecuteCommand(createCommand);

            var loginUserCommand = new LoginUserCommand(email, "123456");
            ExecuteCommand(loginUserCommand);

            Assert.IsNull(loginUserCommand.Result);
        }
Example #33
0
        public void LoginUser_With_Incorrect_Password_But_Verified()
        {
            const string email = "*****@*****.**";

            var createCommand = new CreateClientCommand("test", email, "123456", "brag", 3.2342, 23.4545, 1);
            ExecuteCommand(createCommand);

            var client = Session.QueryOver<Client>().Where(c => c.Email == email).SingleOrDefault();
            client.IsVerified = true;
            Session.Update(client);

            var loginUserCommand = new LoginUserCommand(email, "12345678");
            ExecuteCommand(loginUserCommand);

            Assert.AreEqual(1, loginUserCommand.Result.RetryCount);
        }
Example #34
0
        /* Callback */
        static void StartCommunication()
        {
            Console.WriteLine("*****  Test HTTP CALLBACK Client  *****");
            Console.WriteLine("\n\nPress a key to start the communication");
            Console.ReadLine();

            User testUser1 = userList.ElementAt(0);
            UserNodeCore testClient1 = uncList.ElementAt(0);

            LoginUserCommand login = new LoginUserCommand(testUser1.UserName, testUser1.Password);

            testClient1.ConnectToService(login);
            Console.WriteLine("\n\n\nClient is now ready to perform some other task");

            User testUser2 = userList.ElementAt(1);
            UserNodeCore testClient2 = uncList.ElementAt(1);
            Console.WriteLine("\n\n\nProvo a connettermi....");
            testClient2.ConnectToService(login);
            Console.WriteLine("\n\n\nConnessione effettuata!");
        }