public TwoFactorRequiredUserError(TwoFactorAuthorizationException exception)
            : base(exception.Message, innerException: exception)
        {
            Guard.ArgumentNotNull(exception, nameof(exception));

            TwoFactorType = exception.TwoFactorType;
            RetryFailed   = exception is TwoFactorChallengeFailedException;
        }
        public IObservable <TwoFactorChallengeResult> HandleTwoFactorException(TwoFactorAuthorizationException exception)
        {
            var userError = new TwoFactorRequiredUserError(exception);

            return(twoFactorDialog.Show(userError)
                   .ObserveOn(RxApp.MainThreadScheduler)
                   .SelectMany(x =>
                               x == RecoveryOptionResult.RetryOperation
                        ? Observable.Return(userError.ChallengeResult)
                        : Observable.Throw <TwoFactorChallengeResult>(exception)));
        }
        public async Task <TwoFactorChallengeResult> HandleTwoFactorException(TwoFactorAuthorizationException exception)
        {
            await ThreadingHelper.SwitchToMainThreadAsync();

            var userError = new TwoFactorRequiredUserError(exception);
            var result    = await twoFactorDialog.Show(userError);

            if (result != null)
            {
                return(result);
            }
            else
            {
                throw exception;
            }
        }
Exemplo n.º 4
0
        async Task <ApplicationAuthorization> HandleTwoFactorAuthorization(
            HostAddress hostAddress,
            IGitHubClient client,
            NewAuthorization newAuth,
            TwoFactorAuthorizationException exception)
        {
            for (;;)
            {
                var challengeResult = await twoFactorChallengeHandler.Value.HandleTwoFactorException(exception);

                if (challengeResult == null)
                {
                    throw new InvalidOperationException(
                              "ITwoFactorChallengeHandler.HandleTwoFactorException returned null.");
                }

                if (!challengeResult.ResendCodeRequested)
                {
                    try
                    {
                        var auth = await CreateAndDeleteExistingApplicationAuthorization(
                            client,
                            newAuth,
                            challengeResult.AuthenticationCode).ConfigureAwait(false);

                        return(EnsureNonNullAuthorization(auth));
                    }
                    catch (TwoFactorAuthorizationException e)
                    {
                        exception = e;
                    }
                    catch (Exception e)
                    {
                        await twoFactorChallengeHandler.Value.ChallengeFailed(e);

                        await keychain.Delete(hostAddress).ConfigureAwait(false);

                        throw;
                    }
                }
                else
                {
                    return(null);
                }
            }
        }
Exemplo n.º 5
0
        public async Task <TwoFactorChallengeResult> HandleTwoFactorException(TwoFactorAuthorizationException exception)
        {
            Guard.ArgumentNotNull(exception, nameof(exception));

            await JoinableTaskContext.Factory.SwitchToMainThreadAsync();

            var userError = new TwoFactorRequiredUserError(exception);
            var result    = await twoFactorDialog.Show(userError);

            if (result != null)
            {
                return(result);
            }
            else
            {
                throw exception;
            }
        }
 public TwoFactorRequiredUserError(TwoFactorAuthorizationException exception)
     : this(exception, exception.TwoFactorType)
 {
 }
Exemplo n.º 7
0
 public TwoFactorRequiredUserError(TwoFactorAuthorizationException exception)
     : base(exception.Message, innerException: exception)
 {
     TwoFactorType = exception.TwoFactorType;
     RetryFailed   = exception is TwoFactorChallengeFailedException;
 }