private ActionResult LoginChallengeImpl()
        {
            var localAutoLogonViewData  = new LocalAuthLogonViewData(this.CurrentFirmaSession);
            var localAutoLogonViewModel = new LocalAuthLogonViewModel();

            return(RazorView <LocalAuthLogon, LocalAuthLogonViewData, LocalAuthLogonViewModel>(localAutoLogonViewData, localAutoLogonViewModel));
        }
        public ActionResult LocalAuthLogon(LocalAuthLogonViewModel viewModel)
        {
            RequireLocalAuthMode();
            SitkaHttpApplication.Logger.Info($"LocalAuthenticationController - LocalAuthLogon() - AuthType:{FirmaWebConfiguration.AuthenticationType}");
            DateTime currentDateTime = DateTime.Now;

            var personLoginAccount = ProjectFirmaModels.SecurityUtil.UserAuthentication.Validate(HttpRequestStorage.DatabaseEntities, viewModel.UserName, viewModel.Password, this.CurrentTenant.TenantID);

            if (personLoginAccount == null)
            {
                string invalidLoginGenericMessage = $"Bad user name or password";
                SetErrorForDisplay(invalidLoginGenericMessage);
                return(new RedirectResult(SitkaRoute <LocalAuthenticationController> .BuildUrlFromExpression(c => c.LocalAuthLogon())));
            }

            // PersonLoginAccount may have changed (for example, login count may have incremented)
            // But since we have no current Person, we need to use the "No Audit" SaveChanges function.
            HttpRequestStorage.DatabaseEntities.SaveChangesWithNoAuditing(CurrentFirmaSession.TenantID);

            FirmaOwinStartup.MakeFirmaSessionForPersonLoggingIn(personLoginAccount.Person, currentDateTime);

            var claims = new List <Claim>();

            claims.Add(new Claim(ClaimTypes.Name, HttpRequestStorage.FirmaSession.FirmaSessionGuid.ToString()));
            var id  = new ClaimsIdentity(claims, FirmaOwinStartup.CookieAuthenticationType);
            var ctx = Request.GetOwinContext();
            var authenticationManager = ctx.Authentication;

            authenticationManager.SignIn(id);

            SitkaHttpApplication.Logger.Info($"LocalAuthenticationController - Logged In PersonID:{personLoginAccount.PersonID}, email:{personLoginAccount.Person.Email}");
            // Just show home page for now..
            return(new RedirectResult(SitkaRoute <HomeController> .BuildUrlFromExpression(c => c.Index())));
        }