public async Task <IActionResult> GetNewUserData([FromQuery] string userid)
        {
            string        actResult = string.Empty;
            JWTLoginModel model     = new JWTLoginModel();

            Response.StatusCode = StatusCodes.Status500InternalServerError;

            var user = _userManager.FindByIdAsync(userid).Result;

            if (user != null)
            {
                model.UserId    = user.Id;
                model.email     = user.Email;
                model.firstName = user.FIRST_NAME;
                model.lastName  = user.LAST_NAME;
                model.password  = user.PasswordEncrypt;
                var _roles = await _userManager.GetRolesAsync(user);

                model.roles    = _roles.ToList();
                model.orgUsers = GetOrgUserWithClients(user.Id, "open_waters");
                model.isAdmin  = GetIsAdmin(model.orgUsers);
                return(Ok(model));
            }

            // If we got this far, something failed, redisplay form
            model.errMsg = "Something went wrong!";
            return(Ok(model));
        }
        public async Task <IActionResult> JWTLogin([FromBody] JWTLoginModel model)
        {
            _log.InsertT_PRT_SYS_LOG("Info", "JWTLogin Method called.");
            string actResult = string.Empty;

            model.isLoggedIn    = false;
            model.isLockedOut   = false;
            model.roles         = null;
            model.errMsg        = "";
            Response.StatusCode = StatusCodes.Status500InternalServerError;

            var user = _userManager.FindByNameAsync(model.email).Result;

            if (user == null)
            {
                model.errMsg = "User with email not found!";
                _log.InsertT_PRT_SYS_LOG("Error", "User with email not found!");
                return(Ok(model));
            }
            model.UserId    = user.Id;
            model.firstName = user.FIRST_NAME;
            model.lastName  = user.LAST_NAME;

            if (user != null)
            {
                if (!_userManager.IsEmailConfirmedAsync(user).Result)
                {
                    model.errMsg = "Email not confirmed!";
                    _log.InsertT_PRT_SYS_LOG("Error", "Email not confirmed!");
                    return(Ok(model));
                }
            }

            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(model.email, Utils.Decrypt(model.password), model.rememberMe, lockoutOnFailure : true);

            if (result.Succeeded)
            {
                //update last login datetime
                _DbPortal.UpdateT_PRT_USERS_LoginDate(user);

                //remove Left Menu memorycache for user, so it can be repopulated from db
                //string CacheKey = "UserMenuData" + user.Id;
                //_memoryCache.Remove(CacheKey);

                _logger.LogInformation("User logged in.");
                _log.InsertT_PRT_SYS_LOG("Info", "User logged in.");
                model.isLoggedIn = true;
                var _roles = await _userManager.GetRolesAsync(user);

                model.roles         = _roles.ToList();
                model.orgUsers      = GetOrgUserWithClients(user.Id, "open_waters");;
                model.isAdmin       = GetIsAdmin(model.orgUsers);
                Response.StatusCode = StatusCodes.Status200OK;
                return(Ok(model));
                //return RedirectToLocal(returnUrl);
            }

            /*
             * if (result.RequiresTwoFactor)
             * {
             *  return RedirectToAction(nameof(LoginWith2fa), new { returnUrl, model.RememberMe });
             * }
             */
            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                _log.InsertT_PRT_SYS_LOG("Info", "User account locked out.");
                model.errMsg = "User account locked out.";
                //return RedirectToAction(nameof(Lockout));
                //return Ok(model);
            }
            else
            {
                //ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                //return View(model);
                model.errMsg = "Invalid login attempt.";
                _log.InsertT_PRT_SYS_LOG("Error", "Invalid login attempt.");
                //return Ok(model);
            }
            // If we got this far, something failed, redisplay form
            if (Response.StatusCode != StatusCodes.Status200OK)
            {
                model.errMsg = "Something went wrong!";
                _log.InsertT_PRT_SYS_LOG("Error", "Something went wrong!");
            }
            return(Ok(model));
        }