public async Task <ActionResult> VerifyCode(VerifyCodeViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            Users.Infrastructure.Helpers.SignInStatus result = await SignInHelper.TwoFactorSignIn(model.Provider, model.Code, isPersistent : false, rememberBrowser : model.RememberBrowser);

            switch (result)
            {
            case Users.Infrastructure.Helpers.SignInStatus.Success:
                var ident = HttpContext.User.Identity as ClaimsIdentity;
                ident.AddClaims(AdministratorClaimsProvider.AddAdministratorAccessToRoles(this, ident));
                HttpContext.GetOwinContext().Authentication.User.AddIdentity(ident);
                return(RedirectToLocal(model.ReturnUrl));

            case Users.Infrastructure.Helpers.SignInStatus.LockedOut:
                return(View("Lockout"));

            case Users.Infrastructure.Helpers.SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Invalid code.");
                return(View(model));
            }
        }
        public async Task <ActionResult> Login(LoginViewModel details)
        {
            string returnUrl = TempData["returnUrl"] == null ? "" : TempData["returnUrl"].ToString();

            if (ModelState.IsValid)
            {
                AppUser user = await UserManager.FindAsync(details.UserName,
                                                           details.Password);

                if (user == null)
                {
                    ModelState.AddModelError("", "Невалидно потребителско име или парола!");
                }
                else
                {
                    ClaimsIdentity ident = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

                    ident.AddClaims(AdministratorClaimsProvider.AddAdministratorAccessToRoles(this, ident));
                    AuthManager.SignOut();

                    AuthManager.SignIn(new AuthenticationProperties {
                        IsPersistent = false
                    }, ident);



                    if (!user.IsGoogleAuthenticatorEnabled)
                    {
                        return(RedirectToAction("EnableGoogleAuthenticator", new { returnUrl = returnUrl, userName = user.UserName }));
                    }

                    Infrastructure.Helpers.SignInStatus result = await SignInHelper.PasswordSignIn(details.UserName, details.Password, false, shouldLockout : false);

                    switch (result)
                    {
                    case Infrastructure.Helpers.SignInStatus.Success:
                        return(RedirectToLocal(returnUrl));

                    case Infrastructure.Helpers.SignInStatus.LockedOut:
                        return(View("Lockout"));

                    case Infrastructure.Helpers.SignInStatus.RequiresTwoFactorAuthentication:
                        return(RedirectToAction("SendCode", new { ReturnUrl = returnUrl }));

                    case Infrastructure.Helpers.SignInStatus.Failure:
                    default:
                        ModelState.AddModelError("", "Invalid login attempt.");
                        return(View(details));
                    }
                }
            }

            TempData["returnUrl"] = returnUrl;
            return(View(details));
        }