Skip to content

Commit b852883

Browse files
authored
FUND-1179 Improving swagger schema (#112)
* FUND-1179 Improving swagger schema * FUND-1179 CR fixes
1 parent e0e02af commit b852883

File tree

10 files changed

+75
-81
lines changed

10 files changed

+75
-81
lines changed

src/OneGround.ZGW.Autorisaties.Web/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,6 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
129129
app.UseBatchId();
130130

131131
app.ConfigureZGWApi(env);
132-
app.ConfigureZGWSwagger();
132+
app.ConfigureZgwSwagger();
133133
}
134134
}

src/OneGround.ZGW.Besluiten.Web/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,6 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
153153
app.UseBatchId();
154154

155155
app.ConfigureZGWApi(env);
156-
app.ConfigureZGWSwagger();
156+
app.ConfigureZgwSwagger();
157157
}
158158
}

src/OneGround.ZGW.Catalogi.Web/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,6 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
152152
app.UseBatchId();
153153

154154
app.ConfigureZGWApi(env);
155-
app.ConfigureZGWSwagger();
155+
app.ConfigureZgwSwagger();
156156
}
157157
}

src/OneGround.ZGW.Common.Web/Extensions/ApplicationBuilder/SwaggerApplicationBuilderExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace OneGround.ZGW.Common.Web.Extensions.ApplicationBuilder;
99

1010
public static class SwaggerApplicationBuilderExtensions
1111
{
12-
public static void ConfigureZGWSwagger(this IApplicationBuilder app, Action<SwaggerUIOptions> config = null)
12+
public static void ConfigureZgwSwagger(this IApplicationBuilder app, Action<SwaggerUIOptions> config = null)
1313
{
1414
app.UseSwagger(option =>
1515
{

src/OneGround.ZGW.Common.Web/Extensions/ServiceCollection/SwaggerServiceCollectionExtensions.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ public class VersionDescriptionDetails
1818
public string ApiName { get; set; }
1919
public ApiVersionDescription ApiVersionDescription { get; set; }
2020
public string ZgwVersion { get; set; }
21-
public bool UseVNGVersioning { get; set; }
2221
}
2322

2423
public class AddSwaggerOptions
@@ -39,7 +38,7 @@ private static string DefaultTitleBuilder(VersionDescriptionDetails details)
3938

4039
private static string DefaultDescriptionBuilder(VersionDescriptionDetails details)
4140
{
42-
return $"ZGW Version: {details.ZgwVersion}{(details.UseVNGVersioning ? $" | VNG Version: {details.ApiVersionDescription.ApiVersion}" : "")}";
41+
return $"ZGW Version: {details.ZgwVersion} | VNG Version: {details.ApiVersionDescription.ApiVersion}";
4342
}
4443
}
4544

@@ -49,7 +48,6 @@ public static IServiceCollection AddSwagger(
4948
this IServiceCollection services,
5049
string apiName,
5150
string zgwVersion,
52-
bool useVNGVersioning,
5351
Action<SwaggerGenOptions> swaggerGenOptions = null,
5452
Action<AddSwaggerOptions> configureAddSwaggerOptions = null
5553
)
@@ -63,7 +61,7 @@ public static IServiceCollection AddSwagger(
6361
x.MapType<Geometry>(() => new OpenApiSchema { Type = "object" });
6462

6563
x.CustomOperationIds(SwaggerCustomOperationIdsSelector.OperationIdSelector);
66-
x.CustomSchemaIds(type => DefaultSchemaIdSelector(type));
64+
x.CustomSchemaIds(DefaultSchemaIdSelector);
6765
x.ExampleFilters();
6866

6967
var apiVersionDescriptionProvider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();
@@ -73,7 +71,6 @@ public static IServiceCollection AddSwagger(
7371
{
7472
ApiName = apiName,
7573
ApiVersionDescription = versionDescription,
76-
UseVNGVersioning = useVNGVersioning,
7774
ZgwVersion = zgwVersion,
7875
};
7976

@@ -117,7 +114,7 @@ public static IServiceCollection AddSwagger(
117114
}
118115

119116
// https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/752
120-
private static string DefaultSchemaIdSelector(Type modelType)
117+
public static string DefaultSchemaIdSelector(Type modelType)
121118
{
122119
if (!modelType.IsConstructedGenericType)
123120
return modelType.ToString(); //Can also be modelType.Name

src/OneGround.ZGW.Common.Web/Extensions/ServiceCollection/ZGWApiServiceCollectionExtensions.cs

Lines changed: 64 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using Microsoft.AspNetCore.Builder;
99
using Microsoft.AspNetCore.HttpOverrides;
1010
using Microsoft.AspNetCore.Mvc;
11-
using Microsoft.AspNetCore.Mvc.Formatters;
1211
using Microsoft.AspNetCore.Mvc.ModelBinding;
1312
using Microsoft.Extensions.Configuration;
1413
using Microsoft.Extensions.DependencyInjection;
@@ -30,15 +29,13 @@ public class ZGWApiOptions
3029
public ZGWApiServiceSettings ApiServiceSettings { get; set; } = new();
3130
public Action<MvcNewtonsoftJsonOptions> NewtonsoftJsonOptions { get; set; } = null;
3231
public Action<MvcOptions> MvcOptions { get; set; } = null;
33-
public Action<AddSwaggerOptions> AddSwaggerOptions { get; set; } = null;
3432
public Action<SwaggerGenOptions> SwaggerGenOptions { get; set; } = null;
33+
public Action<AddSwaggerOptions> AddSwaggerOptions { get; set; } = null;
3534
}
3635

3736
public class ZGWApiServiceSettings
3837
{
3938
public bool RegisterSharedAudittrailHandlers = false;
40-
public bool UseVNGVersioning = true;
41-
public bool AddXmlSerializerOutputFormatter = false;
4239
public string ApiGroupNameFormat = "'v'VVV";
4340
}
4441

@@ -56,58 +53,17 @@ public static void AddZGWApi(
5653
configureZgwApiOptions?.Invoke(zgwApiOptions);
5754

5855
services.AddLocalization();
59-
services.Configure<ForwardedHeadersOptions>(options =>
60-
{
61-
options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
62-
63-
options.KnownNetworks.Clear();
64-
options.KnownProxies.Clear();
65-
66-
var knownNetworks = configuration.GetSection("ForwardedHeaders:KnownNetworks").Get<string[]>() ?? [];
67-
if (knownNetworks.Length != 0)
68-
{
69-
foreach (var network in knownNetworks)
70-
{
71-
var parts = network.Split('/');
72-
73-
if (parts.Length == 2 && IPAddress.TryParse(parts[0], out var ipAddress) && int.TryParse(parts[1], out var prefixLength))
74-
{
75-
options.KnownNetworks.Add(new Microsoft.AspNetCore.HttpOverrides.IPNetwork(ipAddress, prefixLength));
76-
}
77-
else
78-
{
79-
throw new FormatException(
80-
$"Invalid network format in 'ForwardedHeaders:KnownNetworks': '{network}'. Expected format is '[IPAddress]/[PrefixLength]'."
81-
);
82-
}
83-
}
84-
}
85-
86-
var knownProxies = configuration.GetSection("ForwardedHeaders:KnownProxies").Get<string[]>() ?? [];
87-
if (knownProxies.Length != 0)
88-
{
89-
foreach (var proxy in knownProxies)
90-
{
91-
options.KnownProxies.Add(IPAddress.Parse(proxy));
92-
}
93-
}
94-
95-
bool resolverForwardedHeader = configuration.GetValue("Application:ResolveForwardedHost", false);
96-
if (resolverForwardedHeader)
97-
{
98-
options.ForwardedHeaders |= ForwardedHeaders.XForwardedHost;
99-
}
100-
});
56+
services.ConfigureForwardedHeaders(configuration);
10157

10258
var callingAssembly = Assembly.GetCallingAssembly();
103-
var executingAssembly = Assembly.GetExecutingAssembly();
10459

10560
services.AddHealthChecks();
10661

10762
services.AddMediatR(x =>
10863
{
10964
x.RegisterServicesFromAssemblies(callingAssembly);
11065
});
66+
11167
if (zgwApiOptions.ApiServiceSettings.RegisterSharedAudittrailHandlers)
11268
{
11369
services.AddMediatR(x =>
@@ -118,15 +74,7 @@ public static void AddZGWApi(
11874

11975
services.AddScoped(typeof(IPipelineBehavior<,>), typeof(HandlerLoggingBehavior<,>));
12076

121-
services.AddAutoMapper(
122-
mappingConfiguration =>
123-
{
124-
mappingConfiguration.ShouldMapMethod = m => false;
125-
mappingConfiguration.Internal().Mappers.Insert(0, new NullableEnumMapper());
126-
},
127-
callingAssembly,
128-
executingAssembly
129-
);
77+
services.AddAutoMapper(callingAssembly);
13078

13179
// Replace the default IApiVersionParser implementation with our own implementation which supports patch numbr (like 1.3.1)
13280
services.Replace(ServiceDescriptor.Transient<IApiVersionParser, ZgwApiVersionParser>());
@@ -150,11 +98,6 @@ public static void AddZGWApi(
15098
options.ModelBinderProviders.Insert(0, new GuidBinderProvider());
15199
options.ReturnHttpNotAcceptable = true;
152100

153-
if (zgwApiOptions.ApiServiceSettings.AddXmlSerializerOutputFormatter)
154-
{
155-
options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
156-
}
157-
158101
zgwApiOptions.MvcOptions?.Invoke(options);
159102
})
160103
.ConfigureApiBehaviorOptions(options =>
@@ -184,12 +127,66 @@ public static void AddZGWApi(
184127
services.AddRouting(options => options.LowercaseUrls = true);
185128

186129
var zgwVersion = ApplicationInformation.GetVersion();
187-
services.AddSwagger(
188-
apiName,
189-
zgwVersion,
190-
zgwApiOptions.ApiServiceSettings.UseVNGVersioning,
191-
zgwApiOptions.SwaggerGenOptions,
192-
zgwApiOptions.AddSwaggerOptions
130+
services.AddSwagger(apiName, zgwVersion, zgwApiOptions.SwaggerGenOptions, zgwApiOptions.AddSwaggerOptions);
131+
}
132+
133+
public static void AddAutoMapper(this IServiceCollection services, Assembly callingAssembly)
134+
{
135+
var executingAssembly = Assembly.GetExecutingAssembly();
136+
services.AddAutoMapper(
137+
mappingConfiguration =>
138+
{
139+
mappingConfiguration.ShouldMapMethod = m => false;
140+
mappingConfiguration.Internal().Mappers.Insert(0, new NullableEnumMapper());
141+
},
142+
callingAssembly,
143+
executingAssembly
193144
);
194145
}
146+
147+
public static void ConfigureForwardedHeaders(this IServiceCollection services, IConfiguration configuration)
148+
{
149+
services.Configure<ForwardedHeadersOptions>(options =>
150+
{
151+
options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
152+
153+
options.KnownNetworks.Clear();
154+
options.KnownProxies.Clear();
155+
156+
var knownNetworks = configuration.GetSection("ForwardedHeaders:KnownNetworks").Get<string[]>() ?? [];
157+
if (knownNetworks.Length != 0)
158+
{
159+
foreach (var network in knownNetworks)
160+
{
161+
var parts = network.Split('/');
162+
163+
if (parts.Length == 2 && IPAddress.TryParse(parts[0], out var ipAddress) && int.TryParse(parts[1], out var prefixLength))
164+
{
165+
options.KnownNetworks.Add(new Microsoft.AspNetCore.HttpOverrides.IPNetwork(ipAddress, prefixLength));
166+
}
167+
else
168+
{
169+
throw new FormatException(
170+
$"Invalid network format in 'ForwardedHeaders:KnownNetworks': '{network}'. Expected format is '[IPAddress]/[PrefixLength]'."
171+
);
172+
}
173+
}
174+
}
175+
176+
var knownProxies = configuration.GetSection("ForwardedHeaders:KnownProxies").Get<string[]>() ?? [];
177+
if (knownProxies.Length != 0)
178+
{
179+
foreach (var proxy in knownProxies)
180+
{
181+
options.KnownProxies.Add(IPAddress.Parse(proxy));
182+
}
183+
}
184+
185+
var resolverForwardedHeader = configuration.GetValue("Application:ResolveForwardedHost", false);
186+
if (resolverForwardedHeader)
187+
{
188+
options.ForwardedHeaders |= ForwardedHeaders.XForwardedHost;
189+
}
190+
});
191+
}
195192
}

src/OneGround.ZGW.Documenten.Web/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,6 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
175175
registerMiddleware: a => a.UseMiddleware<InterceptBase64ContentMiddleware>()
176176
);
177177

178-
app.ConfigureZGWSwagger();
178+
app.ConfigureZgwSwagger();
179179
}
180180
}

src/OneGround.ZGW.Notificaties.Web/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
139139
app.UseCorrelationId();
140140
app.UseBatchId();
141141
app.ConfigureZGWApi(env);
142-
app.ConfigureZGWSwagger();
142+
app.ConfigureZgwSwagger();
143143

144144
#if DEBUG
145145
app.UseNotificatiesHangfireDashboard();

src/OneGround.ZGW.Referentielijsten.Web/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,6 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
7272
app.UseBatchId();
7373

7474
app.ConfigureZGWApi(env, dontRegisterLogBadRequestMiddleware: true);
75-
app.ConfigureZGWSwagger();
75+
app.ConfigureZgwSwagger();
7676
}
7777
}

src/OneGround.ZGW.Zaken.Web/Startup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,6 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
182182
app.UseBatchId();
183183

184184
app.ConfigureZGWApi(env);
185-
app.ConfigureZGWSwagger();
185+
app.ConfigureZgwSwagger();
186186
}
187187
}

0 commit comments

Comments
 (0)