Exemplo n.º 1
0
        public async Task <UserSessionResponse> AuthenticateAsync(AuthenticateUserRequest model)
        {
            string encryptedPassword = _encryptionUtil.Encrypt(model.Password);

            var user = await _userService.Authenticate(model.EmailAddress.ToLower());

            if (user == null)
            {
                throw new CannotAuthenticateException();
            }
            UserSessionResponse session = null;

            if (user.FailedLoginCount < 5 && user.Password == encryptedPassword)
            {
                user.LoggedInAt       = DateTime.UtcNow;
                user.FailedLoginCount = 0;
                session = new UserSessionResponse()
                {
                    Token         = GenerateJSONWebToken(user),
                    RefreshToken  = Guid.NewGuid().ToString().Replace("-", ""),
                    UserId        = user.Id,
                    Name          = user.Name,
                    Role          = user.Role,
                    EmailAddress  = user.EmailAddress,
                    EmailVerified = user.EmailVerified,
                    Phone         = user.Mobile
                };
            }
            else
            {
                user.FailedLoginCount++;
            }
            await _userService.Update(user);

            if (session == null)
            {
                throw new CannotAuthenticateException();
            }
            return(session);
        }