public virtual void ConfigureTwoFactorAuthentication(Guid accountID, TwoFactorAuthMode mode)
        {
            Tracing.Information("[UserAccountService.ConfigureTwoFactorAuthentication] called: {0}", accountID);

            var account = this.GetByID(accountID);

            if (account == null)
            {
                throw new ArgumentException("Invalid AccountID");
            }

            account.ConfigureTwoFactorAuthentication(mode);
            Update(account);
        }
Exemple #2
0
        public async Task ConfigureTwoFactorAuthenticationAsync(int accountId, TwoFactorAuthMode mode)
        {
            _logger.LogInformation(GetLogMessage($"called: {accountId}"));

            var account = await GetByIdAsync(accountId, x => x.TwoFactorAuthTokenCollection);

            if (account == null)
            {
                throw new ArgumentException("Invalid Account Id");
            }

            ConfigureTwoFactorAuthentication(account, mode);
            Update(account);

            _logger.LogInformation(GetLogMessage("Success"));
        }
Exemple #3
0
        protected virtual void ConfigureTwoFactorAuthentication(UserAccount account, TwoFactorAuthMode mode)
        {
            if (account == null)
            {
                throw new ArgumentNullException(nameof(account));
            }

            _logger.LogInformation(GetLogMessage($"called for accountID: {account.UserId}, mode: {mode}"));

            if (account.AccountTwoFactorAuthMode == mode)
            {
                _logger.LogWarning(GetLogMessage("Nothing to do -- mode is same as current value"));
                return;
            }

            if (mode == TwoFactorAuthMode.Mobile &&
                string.IsNullOrWhiteSpace(account.MobilePhoneNumber))
            {
                var error = GetValidationMessage(UserAccountConstants.ValidationMessages.RegisterMobileForTwoFactor);
                _logger.LogError(GetLogMessage(error));
                throw new ValidationException(error);
            }

            ClearMobileAuthCode(account);

            account.AccountTwoFactorAuthMode   = mode;
            account.CurrentTwoFactorAuthStatus = TwoFactorAuthMode.None;

            if (mode == TwoFactorAuthMode.None)
            {
                RemoveTwoFactorAuthTokens(account);

                _logger.LogTrace(GetLogMessage("success -- two factor auth disabled"));
                AddEvent(new TwoFactorAuthenticationDisabledEvent {
                    Account = account
                });
            }
            else
            {
                _logger.LogTrace(GetLogMessage($"success -- two factor auth enabled, mode: {mode}"));
                AddEvent(new TwoFactorAuthenticationEnabledEvent {
                    Account = account, Mode = mode
                });
            }
        }
Exemple #4
0
        public ActionResult Index(TwoFactorAuthMode mode)
        {
            try
            {
                this.userAccountService.ConfigureTwoFactorAuthentication(this.User.GetUserID(), mode);

                ViewData["Message"] = "Update Success";

                var acct = userAccountService.GetByID(this.User.GetUserID());
                return(View("Index", acct));
            }
            catch (ValidationException ex)
            {
                ModelState.AddModelError("", ex.Message);
            }

            return(View("Index", userAccountService.GetByID(this.User.GetUserID())));
        }
 public ActionResult Index(TwoFactorAuthMode mode)
 {
     try
     {
         this.userAccountService.ConfigureTwoFactorAuthentication(this.User.GetUserID(), mode);
         
         ViewData["Message"] = "Update Success";
         
         var acct = userAccountService.GetByID(this.User.GetUserID());
         return View("Index", acct);
     }
     catch (ValidationException ex)
     {
         ModelState.AddModelError("", ex.Message);
     }
     
     return View("Index", userAccountService.GetByID(this.User.GetUserID()));
 }
Exemple #6
0
        protected internal virtual void ConfigureTwoFactorAuthentication(TwoFactorAuthMode mode)
        {
            Tracing.Information("[UserAccount.ConfigureTwoFactorAuthentication] called for accountID: {0}, mode: {1}", this.ID, mode);

            if (this.AccountTwoFactorAuthMode == mode)
            {
                Tracing.Warning("[UserAccount.ConfigureTwoFactorAuthentication] nothing to do -- mode is same as current value");
                return;
            }

            if (mode == TwoFactorAuthMode.Mobile &&
                String.IsNullOrWhiteSpace(this.MobilePhoneNumber))
            {
                Tracing.Error("[UserAccount.ConfigureTwoFactorAuthentication] failed -- mobile requested but no mobile phone for account");
                throw new ValidationException("Register a mobile phone number to enable mobile two factor authentication.");
            }

            if (mode == TwoFactorAuthMode.Certificate &&
                !this.Certificates.Any())
            {
                Tracing.Error("[UserAccount.ConfigureTwoFactorAuthentication] failed -- certificate requested but no certificates for account");
                throw new ValidationException("Add a client certificate to enable certificate two factor authentication.");
            }

            this.ClearMobileAuthCode();
            this.AccountTwoFactorAuthMode = mode;

            if (mode == TwoFactorAuthMode.None)
            {
                Tracing.Verbose("[UserAccount.ConfigureTwoFactorAuthentication] success -- two factor auth disabled");
                this.AddEvent(new TwoFactorAuthenticationDisabledEvent {
                    Account = this
                });
            }
            else
            {
                Tracing.Verbose("[UserAccount.ConfigureTwoFactorAuthentication] success -- two factor auth enabled, mode: {0}", mode);
                this.AddEvent(new TwoFactorAuthenticationEnabledEvent {
                    Account = this, Mode = mode
                });
            }
        }
        public virtual void ConfigureTwoFactorAuthentication(Guid accountID, TwoFactorAuthMode mode)
        {
            Tracing.Information("[UserAccountService.ConfigureTwoFactorAuthentication] called: {0}", accountID);

            var account = this.GetByID(accountID);
            if (account == null) throw new ArgumentException("Invalid AccountID");

            account.ConfigureTwoFactorAuthentication(mode);
            Update(account);
        }
        public async Task <IActionResult> ConfigureMultiFactorAuthAsync(TwoFactorAuthMode mode)
        {
            await _userAccountService.ConfigureTwoFactorAuthenticationAsync(UserInfo.UserId, mode);

            return(Ok());
        }