Exemplo n.º 1
0
        public void ParseCustomExtension()
        {
            var description = @"
openapi: 3.0.0
info: 
    title: A doc with an extension
    version: 1.0.0
    x-foo: 
        bar: hey
        baz: hi!
paths: {}
";
            var settings    = new OpenApiReaderSettings()
            {
                ExtensionParsers = { { "x-foo", (a, v) => {
                                           var fooNode = (OpenApiObject)a;
                                           return(new FooExtension()
                            {
                                Bar = (fooNode["bar"] as OpenApiString)?.Value,
                                Baz = (fooNode["baz"] as OpenApiString)?.Value
                            });
                                       } } }
            };

            var reader = new OpenApiStringReader(settings);

            var diag = new OpenApiDiagnostic();
            var doc  = reader.Read(description, out diag);

            var fooExtension = doc.Info.Extensions["x-foo"] as FooExtension;

            fooExtension.Should().NotBeNull();
            fooExtension.Bar.Should().Be("hey");
            fooExtension.Baz.Should().Be("hi!");
        }
Exemplo n.º 2
0
        public void TestWithUnknownSecurityScheme()
        {
            var settings = new OpenApiReaderSettings
            {
                ReferenceResolution = ReferenceResolutionSetting.DoNotResolveReferences
            };

            Assert.Throws <ArgumentException>(() => TestUtils.GetOpenAPICompare().FromLocations(OpenapiDoc3, OpenapiDoc3, settings));
        }
        public static OpenApiReaderSettings AddTypedRest([NotNull] this OpenApiReaderSettings settings, [CanBeNull] Action <IEndpointsParserSetup> setup = null)
        {
            var parser = new EndpointsParser();

            setup?.Invoke(parser);

            settings.ExtensionParsers.Add(EndpointList.ExtensionKey, parser.Parse);
            return(settings);
        }
Exemplo n.º 4
0
        private static OpenApiDocument ReadLocation(string location, List <OpenApiOAuthFlow> auths = null,
                                                    OpenApiReaderSettings settings = null)
        {
            using var sr = new StreamReader(location);

            var openAPIDoc = new OpenApiStreamReader(settings).Read(sr.BaseStream, out var diagnostic);

            if (!diagnostic.Errors.IsNullOrEmpty())
            {
                throw new Exception($"Error reading file. Error: {string.Join(", ", diagnostic.Errors)}");
            }

            return(openAPIDoc);
        }
        /// <summary>
        /// Registers the TypedRest OpenAPI extension parser.
        /// </summary>
        /// <param name="settings">The settings to register the extension parser in.</param>
        /// <param name="endpointRegistry">A list of all known <see cref="IEndpoint"/> kinds; leave <c>null</c> for default.</param>
        /// <seealso cref="OpenApiDocumentExtensions.GetTypedRest"/>
        public static OpenApiReaderSettings AddTypedRest(this OpenApiReaderSettings settings, EndpointRegistry?endpointRegistry = null)
        {
            var parser = new EndpointParser(endpointRegistry ?? EndpointRegistry.Default);

            settings.ExtensionParsers.Add(OpenApiDocumentExtensions.TypedRestKey, (data, _) =>
            {
                if (!(data is OpenApiObject objData))
                {
                    throw new FormatException($"{OpenApiDocumentExtensions.TypedRestKey} is not an object.");
                }

                var entryEndpoint = new EntryEndpoint();
                entryEndpoint.Parse(objData, parser);
                return(entryEndpoint);
            });
Exemplo n.º 6
0
        public async Task <JToken> LoadSchemaAsync(IEnumerable <string> documentUris, string?authorization)
        {
            var docs = documentUris.ToArray();

            if (docs.Length != 1)
            {
                throw new ArgumentException($"Cannot load multiple OpenApiSchema using this loader [{nameof(OpenApiSchemaLoader)}]", nameof(documentUris));
            }
            var documentUri = docs[0];

            var settings = new OpenApiReaderSettings()
            {
                //ReferenceResolution = ReferenceResolutionSetting.ResolveAllReferences,
            };

            using (var stream = await httpClient.GetStreamAsync(documentUri))
            {
                var openApiDocument = new OpenApiStreamReader(settings).Read(stream, out var diagnostic);

                var resolver = new OpenApiReferenceResolver(openApiDocument);
                var walker   = new OpenApiWalker(resolver);
                walker.Walk(openApiDocument);
                foreach (var item in resolver.Errors)
                {
                    diagnostic.Errors.Add(item);
                }

                if (diagnostic.Errors.Count != 0)
                {
                    var message = string.Join(Environment.NewLine, diagnostic.Errors);
                    throw new InvalidOperationException(message);
                }

                var apiV3Json = openApiDocument.Serialize(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Json);
                return(JToken.Parse(apiV3Json));
            }
        }
Exemplo n.º 7
0
 public ChangedOpenApiBO FromLocations(string oldLocation, string oldIdentifier, string newLocation,
                                       string newIdentifier, OpenApiReaderSettings settings = null)
 {
     return(FromSpecifications(ReadLocation(oldLocation, settings: settings), oldIdentifier,
                               ReadLocation(newLocation, settings: settings), newIdentifier));
 }
Exemplo n.º 8
0
 public ChangedOpenApiBO FromLocations(string oldLocation, string newLocation,
                                       OpenApiReaderSettings settings = null)
 {
     return(FromLocations(oldLocation, Path.GetFileNameWithoutExtension(oldLocation), newLocation,
                          Path.GetFileNameWithoutExtension(newLocation), settings));
 }
Exemplo n.º 9
0
 public OpenApiWorkspaceLoader(OpenApiWorkspace workspace, IStreamLoader loader, OpenApiReaderSettings readerSettings)
 {
     _workspace      = workspace;
     _loader         = loader;
     _readerSettings = readerSettings;
 }