public async Task<ActionResult> Login(LoginInfo model) {
bool rememberme = false;
model.ReconstructSettings();
this.ViewData[LoginInfo.Key] = model;
LoadPage(model.Settings.Uri);
var settings = model.Settings;
string partialName = settings.PostPartialName;
if (settings.UseValidateHuman) {
bool IsValidated = model.ValidateHuman.ValidateValue(model.ValidationValue);
if (!IsValidated) {
ModelState.AddModelError("ValidationValue", model.ValidateHuman.AltValidationFailText);
model.ValidationValue = String.Empty;
}
}
if (ModelState.IsValid) {
ModelState.Clear();
ApplicationUser user = await securityHelper.UserManager.FindByNameAsync(model.UserName);
SignInStatus result = await securityHelper.SignInManager.PasswordSignInAsync(model.UserName, model.Password, rememberme, shouldLockout: true);
model.LogInStatus = result;
switch (result) {
case SignInStatus.Success:
await securityHelper.UserManager.ResetAccessFailedCountAsync(user.Id);
break;
case SignInStatus.RequiresVerification:
if (!String.IsNullOrEmpty(settings.PostPartialNameVerification)) {
partialName = settings.PostPartialNameVerification;
}
break;
case SignInStatus.LockedOut:
ModelState.AddModelError(String.Empty, "User locked out.");
if (!String.IsNullOrEmpty(settings.PostPartialNameLockout)) {
partialName = settings.PostPartialNameLockout;
}
break;
case SignInStatus.Failure:
default:
ModelState.AddModelError(String.Empty, "Invalid login attempt.");
if (!String.IsNullOrEmpty(settings.PostPartialNameFailure)) {
partialName = settings.PostPartialNameFailure;
}
if (user.LockoutEndDateUtc.HasValue && user.LockoutEndDateUtc.Value < DateTime.UtcNow) {
user.LockoutEndDateUtc = null;
user.AccessFailedCount = 1;
securityHelper.UserManager.Update(user);
}
break;
}
}
return PartialView(partialName, model);
}
}