Ejemplo n.º 1
0
        /// <summary>
        /// Login method to use for 3rd party logins.
        /// MyPortal Web App and Mobile App(s) should use the API /connect/token endpoint to authenticate.
        /// </summary>
        /// <param name="login"></param>
        /// <returns></returns>
        public async Task <LoginResult> Login(LoginModel login)
        {
            var result = new LoginResult();

            var user = await _userManager.Users.Include(u => u.Person)
                       .FirstOrDefaultAsync(x => x.UserName == login.Username.ToLower());

            if (user == null)
            {
                result.Fail("Username/password incorrect.");

                return(result);
            }

            var signInResult = await _signInManager.CheckPasswordSignInAsync(user, login.Password, false);

            if (!signInResult.Succeeded)
            {
                result.Fail("Username/password incorrect.");
            }
            else if (!user.Enabled)
            {
                result.Fail("Your account is currently disabled. Please try again later.");
            }
            else
            {
                var principal = await _claimsPrincipalFactory.CreateAsync(user);

                result.Success(principal);
            }

            return(result);
        }
Ejemplo n.º 2
0
        public async Task <LoginResult> Login(LoginModel login)
        {
            var result = new LoginResult();

            var user = await _userManager.Users.Include(u => u.Person)
                       .FirstOrDefaultAsync(x => x.UserName == login.Username.ToLower());

            if (user == null)
            {
                result.Fail("Username/password incorrect.");

                return(result);
            }

            var signInResult = await _signInManager.CheckPasswordSignInAsync(user, login.Password, false);

            if (!signInResult.Succeeded)
            {
                result.Fail("Username/password incorrect.");
            }
            else if (!user.Enabled)
            {
                result.Fail("Your account has been disabled. Please try again later.");
            }
            else
            {
                result.Success(BusinessMapper.Map <UserModel>(user));
            }

            return(result);
        }
Ejemplo n.º 3
0
        public void OnLogin(object sender, EventArgs e)
        {
            LoginResult result = null;

            try
            {
                using (var scope = ObjectHost.Host.BeginLifetimeScope())
                {
                    var loginRS = scope.Resolve <IRemoteApi>().Login(
                        new LoginRQ
                    {
                        Account  = View.Model.AsDynamic().Account,
                        Password = View.Model.AsDynamic().Password
                    });
                    if (loginRS.Ok)
                    {
                        result = LoginResult.Success(loginRS.User);
                        loginRS.User.Bind();
                    }
                    else
                    {
                        result = LoginResult.Fail(Constants.INVALID_ACCOUNT_OR_PASSWORD);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(Constants.LOGIN_ERROR, ex);
                result = LoginResult.Fail(Constants.LOGIN_ERROR);
            }

            View.Model = result;
            View.OnLoginFinished();
        }
Ejemplo n.º 4
0
        public async void HttpPost_Create_SignInIsUnsuccessful_ShouldAddErrorToModel_AndReturnViewWithModel()
        {
            var          model      = ValidModel();
            const string loginError = "Oops";
            var          newUser    = A.Fake <IUnauthenticatedUser>();

            A.CallTo(() => apiClient.User).Returns(newUser);

            A.CallTo(() => weeeAuthorization.SignIn(A <string> ._, A <string> ._, A <bool> ._))
            .Returns(LoginResult.Fail(loginError));

            var controller = AccountController();
            var result     = await controller.Create(model);

            Assert.IsType <ViewResult>(result);
            Assert.Equal(model, ((ViewResult)result).Model);

            Assert.Single(controller.ModelState.Values);
            Assert.Single(controller.ModelState.Values.Single().Errors);
            Assert.Equal(loginError, controller.ModelState.Values.Single().Errors.Single().ErrorMessage);
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Login([FromBody] LoginModel login)
        {
            var result = await _signInManager.PasswordSignInAsync(login.Username, login.Password, false, false);

            if (!result.Succeeded)
            {
                return(BadRequest(LoginResult.Fail("Login credentials are invalid.")));
            }

            var user = await _signInManager.UserManager.FindByNameAsync(login.Username);

            var roles = await _signInManager.UserManager.GetRolesAsync(user);

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

            var roleClaims = roles.Select(role => new Claim(ClaimTypes.Role, role));

            claims.AddRange(roleClaims);

            var key    = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:SecurityKey"]));
            var creds  = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var expiry = DateTime.Now.AddHours(double.Parse(_configuration["Jwt:ExpiryInHours"]));

            var token = new JwtSecurityToken(
                _configuration["Jwt:Issuer"],
                _configuration["Jwt:Audience"],
                claims,
                expires: expiry,
                signingCredentials: creds
                );

            return(Ok(LoginResult.Success(new JwtSecurityTokenHandler().WriteToken(token), expiry)));
        }
Ejemplo n.º 6
0
        public async void HttpPost_SignIn_ModelIsValid_ButSignInFails_ShouldAddModelError_AndReturnViewWithModel()
        {
            var loginError = ":(";
            var model      = new InternalLoginViewModel
            {
                Email      = "*****@*****.**",
                Password   = "******",
                RememberMe = false
            };

            A.CallTo(() => weeeAuthorization.SignIn(A <string> ._, A <string> ._, A <bool> ._))
            .Returns(LoginResult.Fail(loginError));

            var controller = AccountController();
            var result     = await controller.SignIn(model, "AnyUrl");

            Assert.IsType <ViewResult>(result);
            Assert.Equal(model, ((ViewResult)result).Model);

            Assert.False(controller.ModelState.IsValid);
            Assert.Single(controller.ModelState.Values);
            Assert.Single(controller.ModelState.Values.Single().Errors);
            Assert.Equal(loginError, controller.ModelState.Values.Single().Errors.Single().ErrorMessage);
        }