public SwaggerDocument GetSwagger(
            string documentName,
            string host      = null,
            string basePath  = null,
            string[] schemes = null)
        {
            if (!_options.SwaggerDocs.TryGetValue(documentName, out Info info))
            {
                throw new UnknownSwaggerDocument(documentName);
            }

            var entry = _serviceEntryProvider.GetALLEntries();

            var schemaRegistry = _schemaRegistryFactory.Create();

            var swaggerDoc = new SwaggerDocument
            {
                Info                = info,
                Host                = host,
                BasePath            = basePath,
                Schemes             = schemes,
                Paths               = CreatePathItems(entry, schemaRegistry),
                Definitions         = schemaRegistry.Definitions,
                SecurityDefinitions = _options.SecurityDefinitions.Any() ? _options.SecurityDefinitions : null,
                Security            = _options.SecurityRequirements.Any() ? _options.SecurityRequirements : null
            };

            return(swaggerDoc);
        }
Exemple #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DocumentGenerator{T}"/> class.
 /// </summary>
 /// <param name="artifactMapper"><see cref="IArtifactMapper{T}"/> for mapping artifacts.</param>
 /// <param name="schemaRegistryFactory"><see cref="ISchemaRegistryFactory"/> for creating schemas.</param>
 public DocumentGenerator(
     IArtifactMapper <T> artifactMapper,
     ISchemaRegistryFactory schemaRegistryFactory)
 {
     _artifactMapper = artifactMapper;
     _schemaRegistry = schemaRegistryFactory.Create();
 }
Exemple #3
0
        public SwaggerDocument GetSwagger(
            string documentName,
            string host      = null,
            string basePath  = null,
            string[] schemes = null)
        {
            if (!_options.SwaggerDocs.TryGetValue(documentName, out Info info))
            {
                throw new UnknownSwaggerDocument(documentName);
            }


            var mapRoutePaths = Swagger.AppConfig.SwaggerConfig.Options?.MapRoutePaths;
            var isOnlyGenerateLocalHostDocs = Swagger.AppConfig.SwaggerConfig.Options?.IsOnlyGenerateLocalHostDocs;
            IEnumerable <ServiceEntry> entries;

            if (isOnlyGenerateLocalHostDocs != null && isOnlyGenerateLocalHostDocs.Value)
            {
                entries = _serviceEntryProvider.GetEntries().Where(p => !p.Descriptor.DisableNetwork());
            }
            else
            {
                entries = _serviceEntryProvider.GetALLEntries().Where(p => !p.Descriptor.DisableNetwork());
            }

            if (mapRoutePaths != null)
            {
                foreach (var path in mapRoutePaths)
                {
                    var entry = entries.Where(p => p.RoutePath == path.SourceRoutePath).FirstOrDefault();
                    if (entry != null)
                    {
                        entry.RoutePath            = path.TargetRoutePath;
                        entry.Descriptor.RoutePath = path.TargetRoutePath;
                    }
                }
            }
            entries = entries.Where(apiDesc => _options.DocInclusionPredicateV2(documentName, apiDesc));
            var schemaRegistry = _schemaRegistryFactory.Create();

            var swaggerDoc = new SwaggerDocument
            {
                Info                = info,
                Host                = host,
                BasePath            = basePath,
                Schemes             = schemes,
                Paths               = CreatePathItems(entries, schemaRegistry),
                Definitions         = schemaRegistry.Definitions,
                SecurityDefinitions = _options.SecurityDefinitions.Any() ? _options.SecurityDefinitions : null,
                Security            = _options.SecurityRequirements.Any() ? _options.SecurityRequirements : null
            };

            return(swaggerDoc);
        }
        public SwaggerDocument GetSwagger(
            string documentName,
            string host      = null,
            string basePath  = null,
            string[] schemes = null)
        {
            var schemaRegistry = _schemaRegistryFactory.Create();

            Info info;

            if (!_settings.SwaggerDocs.TryGetValue(documentName, out info))
            {
                throw new UnknownSwaggerDocument(documentName);
            }

            var apiDescriptions = _apiDescriptionsProvider.ApiDescriptionGroups.Items
                                  .SelectMany(group => group.Items)
                                  .Where(apiDesc => _settings.DocInclusionPredicate(documentName, apiDesc))
                                  .Where(apiDesc => !_settings.IgnoreObsoleteActions || !apiDesc.IsObsolete())
                                  .OrderBy(_settings.SortKeySelector);

            var paths = apiDescriptions
                        .GroupBy(apiDesc => apiDesc.RelativePathSansQueryString())
                        .ToDictionary(group => "/" + group.Key, group => CreatePathItem(group, schemaRegistry));

            var securityDefinitions  = _settings.SecurityDefinitions;
            var securityRequirements = _settings.SecurityRequirements;

            var swaggerDoc = new SwaggerDocument
            {
                Info                = info,
                Host                = host,
                BasePath            = basePath,
                Schemes             = schemes,
                Paths               = paths,
                Definitions         = schemaRegistry.Definitions,
                SecurityDefinitions = securityDefinitions.Any() ? securityDefinitions : null,
                Security            = securityRequirements.Any() ? securityRequirements : null
            };

            var filterContext = new DocumentFilterContext(
                _apiDescriptionsProvider.ApiDescriptionGroups,
                apiDescriptions,
                schemaRegistry);

            foreach (var filter in _settings.DocumentFilters)
            {
                filter.Apply(swaggerDoc, filterContext);
            }

            return(swaggerDoc);
        }
Exemple #5
0
        IParameter CreateFormParameterWithNameAndType(string name, string location, Type type)
        {
            var parameter = new NonBodyParameter
            {
                Name     = name,
                In       = location,
                Required = true,
            };
            var schema = _schemaRegistryFactory.Create().GetOrRegister(type);

            parameter.Type   = schema.Type;
            parameter.Format = schema.Format;
            return(parameter);
        }
Exemple #6
0
        public SwaggerDocument GetSwagger(
            string apiVersion,
            string host      = null,
            string basePath  = null,
            string[] schemes = null)
        {
            var schemaRegistry = _schemaRegistryFactory.Create();

            var info = _options.ApiVersions.FirstOrDefault(v => v.Version == apiVersion);

            if (info == null)
            {
                throw new UnknownApiVersion(apiVersion);
            }

            var paths = GetApiDescriptionsFor(apiVersion)
                        .Where(apiDesc => !(_options.IgnoreObsoleteActions && apiDesc.IsObsolete()))
                        .OrderBy(_options.GroupNameSelector, _options.GroupNameComparer)
                        .GroupBy(apiDesc => apiDesc.RelativePathSansQueryString())
                        .ToDictionary(group => "/" + group.Key, group => CreatePathItem(group, schemaRegistry));

            var swaggerDoc = new SwaggerDocument
            {
                Info                = info,
                Host                = host,
                BasePath            = basePath,
                Schemes             = schemes,
                Paths               = paths,
                Definitions         = schemaRegistry.Definitions,
                SecurityDefinitions = _options.SecurityDefinitions
            };

            var filterContext = new DocumentFilterContext(
                _apiDescriptionsProvider.ApiDescriptionGroups,
                null);

            foreach (var filter in _options.DocumentFilters)
            {
                filter.Apply(swaggerDoc, filterContext);
            }

            return(swaggerDoc);
        }
Exemple #7
0
        public SwaggerDocument GetSwagger(
            string documentName,
            string host      = null,
            string basePath  = null,
            string[] schemes = null)
        {
            if (!_options.SwaggerDocs.TryGetValue(documentName, out Info info))
            {
                throw new UnknownSwaggerDocument(documentName);
            }

            var applicableApiDescriptions = _apiDescriptionsProvider.ApiDescriptionGroups.Items
                                            .SelectMany(group => group.Items)
                                            .Where(apiDesc => _options.DocInclusionPredicate(documentName, apiDesc))
                                            .Where(apiDesc => !_options.IgnoreObsoleteActions || !apiDesc.IsObsolete());

            var schemaRegistry = _schemaRegistryFactory.Create();

            var swaggerDoc = new SwaggerDocument
            {
                Info                = info,
                Host                = host,
                BasePath            = basePath,
                Schemes             = schemes,
                Paths               = CreatePathItems(applicableApiDescriptions, schemaRegistry),
                Definitions         = schemaRegistry.Definitions,
                SecurityDefinitions = _options.SecurityDefinitions.Any() ? _options.SecurityDefinitions : null,
                Security            = _options.SecurityRequirements.Any() ? _options.SecurityRequirements : null
            };

            var filterContext = new DocumentFilterContext(
                _apiDescriptionsProvider.ApiDescriptionGroups,
                applicableApiDescriptions,
                schemaRegistry);

            foreach (var filter in _options.DocumentFilters)
            {
                filter.Apply(swaggerDoc, filterContext);
            }

            return(swaggerDoc);
        }
        public SwaggerDocument GetSwagger(
            string documentName,
            string host      = null,
            string basePath  = null,
            string[] schemes = null)
        {
            if (!_options.SwaggerDocs.TryGetValue(documentName, out Info info))
            {
                throw new UnknownSwaggerDocument(documentName);
            }

            var entry = _serviceEntryProvider.GetALLEntries();



            var schemaRegistry = _schemaRegistryFactory.Create();

            var swaggerDoc = new SwaggerDocument
            {
                Info                = info,
                Host                = host,
                BasePath            = basePath,
                Schemes             = schemes,
                Paths               = CreatePathItems(entry, schemaRegistry),
                Definitions         = schemaRegistry.Definitions,
                SecurityDefinitions = _options.SecurityDefinitions.Any() ? _options.SecurityDefinitions : null,
                Security            = _options.SecurityRequirements.Any() ? _options.SecurityRequirements : null
            };

            //var filterContext = new DocumentFilterContext(
            //    _apiDescriptionsProvider.ApiDescriptionGroups,
            //    applicableApiDescriptions,
            //    schemaRegistry);

            //foreach (var filter in _options.DocumentFilters)
            //{
            //    filter.Apply(swaggerDoc, filterContext);
            //}

            return(swaggerDoc);
        }
Exemple #9
0
        public OpenApiDocument GetSwagger(string documentName, string host = null, string basePath = null)
        {
            if (!_options.SwaggerDocs.TryGetValue(documentName, out OpenApiInfo info))
            {
                throw new UnknownSwaggerDocument(documentName, _options.SwaggerDocs.Select(d => d.Key));
            }

            var applicableApiDescriptions = _apiDescriptionsProvider.ApiDescriptionGroups.Items
                                            .SelectMany(group => group.Items)
                                            .Where(apiDesc => _options.DocInclusionPredicate(documentName, apiDesc))
                                            .Where(apiDesc => !_options.IgnoreObsoleteActions || !apiDesc.IsObsolete());

            var schemaRegistry = _schemaRegistryFactory.Create();

            var swaggerDoc = new OpenApiDocument
            {
                Info       = info,
                Servers    = GenerateServers(host, basePath),
                Paths      = GeneratePaths(applicableApiDescriptions, schemaRegistry),
                Components = new OpenApiComponents
                {
                    Schemas         = schemaRegistry.Schemas,
                    SecuritySchemes = _options.SecuritySchemes
                },
                SecurityRequirements = _options.SecurityRequirements
            };

            var filterContext = new DocumentFilterContext(applicableApiDescriptions, schemaRegistry);

            foreach (var filter in _options.DocumentFilters)
            {
                filter.Apply(swaggerDoc, filterContext);
            }

            return(swaggerDoc);
        }