Example #1
0
        /// <inheritdoc />
        public virtual Task <IWebApiResponse> OnRequestAsync(MiddlewareContext context, Func <MiddlewareContext, CancellationToken, Task <IWebApiResponse> > callNext, CancellationToken cancellationToken = default)
        {
            if (context is null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (callNext is null)
            {
                throw new ArgumentNullException(nameof(callNext));
            }
            return(ExecAsync());

            async Task <IWebApiResponse> ExecAsync()
            {
                var httpResponse = await callNext(context, cancellationToken).ConfigureAwait(false);

                if (httpResponse == null)
                {
                    return(null !);
                }

                if ((int)httpResponse.StatusCode >= 200 && (int)httpResponse.StatusCode <= 299)
                {
                    return(httpResponse);
                }

                ErrorObject error;

                try
                {
                    error = JsonSerializer.Deserialize <ErrorObject>(httpResponse.Content, deserializerOptions);
                }
                catch (JsonException)
                {
                    // Fallback message
                    throw new UnexpectedStatusException(context.Request, httpResponse, httpResponse.Content ?? string.Empty);
                }

                var errorResponse = new WebApiResponse <ErrorObject>(error, httpResponse.StatusCode, httpResponse.ResponseHeaders);

                throw httpResponse.StatusCode switch
                      {
                          HttpStatusCode.BadRequest => BadRequestException.CreateFromResponse(context.Request, errorResponse),
                          HttpStatusCode.Unauthorized => AuthorizationRequiredException.CreateFromResponse(context.Request, errorResponse),
                          HttpStatusCode.Forbidden => AuthorizationRequiredException.CreateFromResponse(context.Request, errorResponse),
                          HttpStatusCode.NotFound => new NotFoundException(context.Request, errorResponse),
#if NETSTANDARD
                          (HttpStatusCode)429 => new TooManyRequestsException(context.Request, errorResponse),
#else
                          HttpStatusCode.TooManyRequests => new TooManyRequestsException(context.Request, errorResponse),
#endif
                          HttpStatusCode.InternalServerError => new ServerErrorException(context.Request, errorResponse),
                          HttpStatusCode.ServiceUnavailable => new ServiceUnavailableException(context.Request, errorResponse),
                          _ => new UnexpectedStatusException(context.Request, httpResponse, httpResponse.Content ?? string.Empty)
                      };
            }
        }
    }
Example #2
0
        public void SerializableTest()
        {
            var request = new HttpRequest(new Uri("http://localhost"), new Dictionary <string, string> {
                { "hello", "tyria" }
            });
            var response = new HttpResponse <ErrorObject>(new ErrorObject {
                Text = "Error"
            }, HttpStatusCode.Forbidden, null, null);
            var error     = AuthorizationError.MissingScopes;
            var exception = new AuthorizationRequiredException(request, response, error);

            exception.Should().BeBinarySerializable();
        }
        private bool ResolveCredentials(AuthorizationRequiredException e)
        {
            CredentialsWindow dlg = new CredentialsWindow
            {
                ConnectionProfile = e.ConnectionProfile,
                Owner             = Application.Current.MainWindow
            };
            var resolved = dlg.ShowDialog().GetValueOrDefault(false);

            if (resolved)
            {
                ConnectionService.Instance.SetCredentials(e.ConnectionProfile, dlg.Username, dlg.Password, e.Scheme, e.Domain);
            }
            return(resolved);
        }
Example #4
0
        static void foo(bool thrownull)
        {
            if (thrownull)
            {
                throw null;
            }


#if !DEBUG
            var a = new AuthorizationRequiredException();
            a.__AuthorizationUrl = "http://foo";

            // Error	1	The type caught or thrown must be derived from System.Exception
            throw (Exception)(object)a;
#endif
        }
Example #5
0
        public void ConstructorTest()
        {
            var request  = Substitute.For <IWebApiRequest>();
            var response = Substitute.For <IWebApiResponse <ErrorObject> >();

            response.Content.Returns(new ErrorObject {
                Text = "Error"
            });
            var error = AuthorizationError.MissingScopes;

            var exception = new AuthorizationRequiredException(request, response, error);

            Assert.Null(exception.InnerException);
            Assert.Same(request, exception.Request);
            Assert.Same(response, exception.Response);
            Assert.Equal(error, exception.AuthorizationError);
        }
 public PendingAuthorizationData(AuthorizationRequiredException ex)
 {
     this.RequestID = ex.ResourceReference;
     this.Endpoint  = ex.Endpoint;
     this.Message   = "Authorization Pending";
 }
        public static Exception CreateWebException(AuthorizationRequiredException ex)
        {
            PendingAuthorizationData data = new PendingAuthorizationData(ex);

            return(new WebFaultException <PendingAuthorizationData>(data, HttpStatusCode.Accepted));
        }
        public static void ThrowAuthorizationRequired(AuthorizationRequiredException ex)
        {
            PendingAuthorizationData data = new PendingAuthorizationData(ex);

            throw new WebFaultException <PendingAuthorizationData>(data, HttpStatusCode.Accepted);
        }