Exemple #1
0
        public async Task <ActionResult <UserDetail> > PostVerify2FACode(Verify2FACodeModel model)
        {
            if (ModelState.IsValid == false)
            {
                return(new ValidationErrorResult(ModelState));
            }

            var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();

            if (user == null)
            {
                _logger.LogWarning("PostVerify2FACode :: No verified user found, returning 404");
                return(NotFound());
            }

            var result = await _signInManager.TwoFactorSignInAsync(model.Provider, model.Code, model.IsPersistent, model.RememberClient);

            if (result.Succeeded)
            {
                return(GetUserDetail(_userService.GetByUsername(user.UserName)));
            }

            if (result.IsLockedOut)
            {
                return(new ValidationErrorResult("User is locked out"));
            }
            if (result.IsNotAllowed)
            {
                return(new ValidationErrorResult("User is not allowed"));
            }

            return(new ValidationErrorResult("Invalid code"));
        }
        public async Task <HttpResponseMessage> PostVerify2FACode(Verify2FACodeModel model)
        {
            if (ModelState.IsValid == false)
            {
                return(Request.CreateValidationErrorResponse(ModelState));
            }

            var userName = await SignInManager.GetVerifiedUserNameAsync();

            if (userName == null)
            {
                Logger.Warn <AuthenticationController>("Get2FAProviders :: No verified user found, returning 404");
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }

            var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent : true, rememberBrowser : false);

            switch (result)
            {
            case SignInStatus.Success:
                //get the user
                var user = Security.GetBackOfficeUser(userName);
                return(SetPrincipalAndReturnUserDetail(user));

            case SignInStatus.LockedOut:
                return(Request.CreateValidationErrorResponse("User is locked out"));

            case SignInStatus.Failure:
            default:
                return(Request.CreateValidationErrorResponse("Invalid code"));
            }
        }
Exemple #3
0
    public async Task <IActionResult> Verify2FACode(Verify2FACodeModel model, string?returnUrl = null)
    {
        MemberIdentityUser?user = await _memberSignInManager.GetTwoFactorAuthenticationUserAsync();

        if (user == null !)
        {
            _logger.LogWarning("PostVerify2FACode :: No verified member found, returning 404");
            return(NotFound());
        }

        if (ModelState.IsValid)
        {
            SignInResult result = await _memberSignInManager.TwoFactorSignInAsync(
                model.Provider,
                model.Code,
                model.IsPersistent,
                model.RememberClient);

            if (result.Succeeded && returnUrl is not null)
            {
                return(RedirectToLocal(returnUrl));
            }

            if (result.IsLockedOut)
            {
                ModelState.AddModelError(nameof(Verify2FACodeModel.Code), "Member is locked out");
            }
            else if (result.IsNotAllowed)
            {
                ModelState.AddModelError(nameof(Verify2FACodeModel.Code), "Member is not allowed");
            }
            else
            {
                ModelState.AddModelError(nameof(Verify2FACodeModel.Code), "Invalid code");
            }
        }

        // We need to set this, to ensure we show the 2fa login page
        IEnumerable <string> providerNames =
            await _twoFactorLoginService.GetEnabledTwoFactorProviderNamesAsync(user.Key);

        ViewData.SetTwoFactorProviderNames(providerNames);
        return(CurrentUmbracoPage());
    }