protected override void Arrange()
            {
                var configValueProvider = new ApiSettings();

                configValueProvider.UseReverseProxyHeaders = true;
                Feature item = new Feature();

                item.IsEnabled = true;
                item.Name      = "openApiMetadata";
                configValueProvider.Features.Add(item);

                _openApiMetadataCacheProvider = Stub <IOpenApiMetadataCacheProvider>();

                A.CallTo(() => _openApiMetadataCacheProvider.GetOpenApiContentByFeedName(A <string> ._))
                .Returns(OpenApiMetadataHelper.GetIdentityContent());

                var fakeopenAPIcontent = A.Fake <List <OpenApiContent> >();

                A.CallTo(() => _openApiMetadataCacheProvider.GetAllSectionDocuments(A <bool> ._)).Returns(fakeopenAPIcontent);

                var sectiondata = _openApiMetadataCacheProvider.GetOpenApiContentByFeedName("openApiMetadata");

                fakeopenAPIcontent.Add(sectiondata);

                _controller = new OpenApiMetadataController(_openApiMetadataCacheProvider, configValueProvider);

                var request = A.Fake <HttpRequest>();

                request.Method = "Post";
                request.Scheme = "http";

                A.CallTo(() => request.Host).Returns(new HostString("localhost", 80));

                request.PathBase    = "/";
                request.RouteValues = new RouteValueDictionary {
                    {
                        "controller", "Token"
                    }
                };

                var httpContext = A.Fake <HttpContext>();

                A.CallTo(() => httpContext.Request).Returns(request);

                var controllerContext = new ControllerContext()
                {
                    HttpContext = httpContext,
                };
                RouteValueDictionary dictionary = new RouteValueDictionary();

                dictionary.Add("controller", "Token");

                controllerContext.RouteData = new RouteData(dictionary);

                _controller.ControllerContext = controllerContext;
            }
Beispiel #2
0
        public bool TryGetSwaggerDocument(HttpRequest request, out string document)
        {
            document = null;

            var openApiMetadataRequest = CreateOpenApiMetadataRequest(request.Path);

            var openApiContent = _openApiMetadataCacheProvider.GetOpenApiContentByFeedName(openApiMetadataRequest.GetFeedName());

            if (openApiContent == null)
            {
                _logger.Debug($"Unable to locate swagger document for {openApiMetadataRequest.GetFeedName()}");
                return(false);
            }

            document = GetMetadataForContent(openApiContent, request, openApiMetadataRequest.SchoolYearFromRoute, openApiMetadataRequest.InstanceIdFromRoute);

            return(true);
        }
        public HttpResponseMessage Get([FromUri] OpenApiMetadataRequest request)
        {
            _logger.Info($"Looking up document for feedname = {request.GetFeedName()}");

            var openApiContent = _openApiMetadataCacheProvider.GetOpenApiContentByFeedName(request.GetFeedName());

            if (openApiContent == null)
            {
                _logger.Warn($"Unable to load swagger document for {request.GetFeedName()}");
                return(new HttpResponseMessage(HttpStatusCode.NotFound));
            }

            var metadata = GetMetadataForContent(openApiContent, request);

            var etag = new EntityTagHeaderValue(
                HashHelper.GetSha256Hash(metadata)
                .ToHexString()
                .DoubleQuoted());

            if (ActionContext.Request.Headers.IfNoneMatch.Contains(etag))
            {
                return(new HttpResponseMessage(HttpStatusCode.NotModified));
            }

            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Headers =
                {
                    ETag = etag
                },
                Content = new StringContent(metadata)
            };

            result.Content.Headers.ContentType = new MediaTypeHeaderValue(SwaggerDocumentHelper.ContentType);

            return(result);
        }