public ActionResult Login(LoginRequestViewModel loginRequestViewModel)
        {
            // Initialize
            questStatus            status = null;
            LoginResponseViewModel loginResponseViewModel = null;


            /*----------------------------------------------------------------------------------------------------------------------------------
            * Log Operation
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = LogOperation();
            if (!questStatusDef.IsSuccess(status))
            {
                loginResponseViewModel = new LoginResponseViewModel();
                loginResponseViewModel.UserMessages[0] = new UserMessageModeler(status).UserMessage;
                status.Message = null;
                loginResponseViewModel.questStatus = status;
                TempData["LoginResponseViewModel"] = loginResponseViewModel;
                return(RedirectToAction("Index"));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Authorize
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = Authorize();
            if (!questStatusDef.IsSuccess(status))
            {
                loginResponseViewModel = new LoginResponseViewModel();
                loginResponseViewModel.UserMessages[0] = new UserMessageModeler(status).UserMessage;
                status.Message = null;
                loginResponseViewModel.questStatus = status;
                TempData["LoginResponseViewModel"] = loginResponseViewModel;
                return(RedirectToAction("Index"));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Login
            *---------------------------------------------------------------------------------------------------------------------------------*/
            UserSessionId  userSessionId  = null;
            AccountModeler accountModeler = new AccountModeler(this.Request, this.UserSession);

            status = accountModeler.Login(Request, loginRequestViewModel, out userSessionId);
            if (!questStatusDef.IsSuccess(status))
            {
                loginResponseViewModel = new LoginResponseViewModel();
                ////loginResponseViewModel.UserMessages.Add(new UserMessageModeler(new questStatus(Severity.Error, "Invalid username or password")).UserMessage);
                loginResponseViewModel.UserMessages.Add(new UserMessageModeler(new questStatus(status.Severity, status.Message)).UserMessage);
                status.Message = null;
                loginResponseViewModel.questStatus = status;
                TempData["LoginResponseViewModel"] = loginResponseViewModel;
                return(RedirectToAction("Index"));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Direct user to home page.
            *---------------------------------------------------------------------------------------------------------------------------------*/
            return(RedirectToAction("Index", "Home", new { _ctx = userSessionId.Id }));
        }
        public ActionResult Authenticate(LoginRequestViewModel loginRequestViewModel)
        {
            // Initialize
            questStatus        status             = null;
            UserMessageModeler userMessageModeler = null;


            /*----------------------------------------------------------------------------------------------------------------------------------
            * Log Operation
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = LogOperation();
            if (!questStatusDef.IsSuccess(status))
            {
                userMessageModeler = new UserMessageModeler(status);
                return(Json(userMessageModeler, JsonRequestBehavior.AllowGet));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Authorize
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = Authorize();
            if (!questStatusDef.IsSuccess(status))
            {
                userMessageModeler = new UserMessageModeler(status);
                return(Json(userMessageModeler, JsonRequestBehavior.AllowGet));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Login
            *---------------------------------------------------------------------------------------------------------------------------------*/
            UserSessionId  userSessionId  = null;
            AccountModeler accountModeler = new AccountModeler(this.Request, this.UserSession);

            status = accountModeler.Login(Request, loginRequestViewModel, out userSessionId);
            if (!questStatusDef.IsSuccess(status))
            {
                userMessageModeler = new UserMessageModeler(status);
                return(Json(userMessageModeler, JsonRequestBehavior.AllowGet));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Return result.
            *---------------------------------------------------------------------------------------------------------------------------------*/
            BaseUserSessionViewModel baseUserSessionViewModel = new BaseUserSessionViewModel();

            baseUserSessionViewModel._ctx        = userSessionId.Id;
            baseUserSessionViewModel.questStatus = new questStatus(Severity.Success, "Successfully authenticated");
            return(Json(baseUserSessionViewModel, JsonRequestBehavior.AllowGet));
        }
        public ActionResult Logout(LogoutRequestViewModel logoutRequestViewModel)
        {
            // Initialize
            questStatus status = null;

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Log Operation
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = LogOperation();
            if (!questStatusDef.IsSuccess(status))
            {
                return(RedirectToAction("Index", "Home", new { _ctx = logoutRequestViewModel.ctx }));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Authorize
            *---------------------------------------------------------------------------------------------------------------------------------*/
            status = Authorize();
            if (!questStatusDef.IsSuccess(status))
            {
                return(RedirectToAction("Index", "Home", new { _ctx = logoutRequestViewModel.ctx }));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Logout
            *---------------------------------------------------------------------------------------------------------------------------------*/
            AccountModeler accountModeler = new AccountModeler(this.Request, this.UserSession);

            status = accountModeler.Logout(logoutRequestViewModel);
            if (!questStatusDef.IsSuccess(status))
            {
                return(RedirectToAction("Index", "Home", new { _ctx = logoutRequestViewModel.ctx }));
            }

            /*----------------------------------------------------------------------------------------------------------------------------------
            * Direct user to login page.
            *---------------------------------------------------------------------------------------------------------------------------------*/
            return(RedirectToAction("Index"));
        }