Skip to content

Commit cd25188

Browse files
ragaumonCopilot
andauthored
Splitted ZGWApiServiceCollectionExtensions into separate files (#114)
* Splitted ZGWApiServiceCollectionExtensions into separate files * Update src/OneGround.ZGW.Common.Web/Extensions/ServiceCollection/ZGWApiExtensions/MediatorServiceCollectionExtensions.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Renamed ConfigureForwardedHeadersServiceCollectionExtensions => ForwardedHeadersServiceCollectionExtensions --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent b852883 commit cd25188

File tree

5 files changed

+114
-79
lines changed

5 files changed

+114
-79
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Reflection;
2+
using AutoMapper.Internal;
3+
using Microsoft.Extensions.DependencyInjection;
4+
5+
namespace OneGround.ZGW.Common.Web.Extensions.ServiceCollection.ZGWApiExtensions;
6+
7+
public static class AutoMapperServiceCollectionExtensions
8+
{
9+
public static IServiceCollection AddAutoMapper(this IServiceCollection services, Assembly callingAssembly)
10+
{
11+
var executingAssembly = Assembly.GetExecutingAssembly();
12+
services.AddAutoMapper(
13+
mappingConfiguration =>
14+
{
15+
mappingConfiguration.ShouldMapMethod = m => false;
16+
mappingConfiguration.Internal().Mappers.Insert(0, new NullableEnumMapper());
17+
},
18+
callingAssembly,
19+
executingAssembly
20+
);
21+
22+
return services;
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System;
2+
using System.Net;
3+
using Microsoft.AspNetCore.Builder;
4+
using Microsoft.AspNetCore.HttpOverrides;
5+
using Microsoft.Extensions.Configuration;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
namespace OneGround.ZGW.Common.Web.Extensions.ServiceCollection.ZGWApiExtensions;
9+
10+
public static class ForwardedHeadersServiceCollectionExtensions
11+
{
12+
public static IServiceCollection ConfigureForwardedHeaders(this IServiceCollection services, IConfiguration configuration)
13+
{
14+
services.Configure<ForwardedHeadersOptions>(options =>
15+
{
16+
options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
17+
18+
options.KnownNetworks.Clear();
19+
options.KnownProxies.Clear();
20+
21+
var knownNetworks = configuration.GetSection("ForwardedHeaders:KnownNetworks").Get<string[]>() ?? [];
22+
if (knownNetworks.Length != 0)
23+
{
24+
foreach (var network in knownNetworks)
25+
{
26+
var parts = network.Split('/');
27+
28+
if (parts.Length == 2 && IPAddress.TryParse(parts[0], out var ipAddress) && int.TryParse(parts[1], out var prefixLength))
29+
{
30+
options.KnownNetworks.Add(new Microsoft.AspNetCore.HttpOverrides.IPNetwork(ipAddress, prefixLength));
31+
}
32+
else
33+
{
34+
throw new FormatException(
35+
$"Invalid network format in 'ForwardedHeaders:KnownNetworks': '{network}'. Expected format is '[IPAddress]/[PrefixLength]'."
36+
);
37+
}
38+
}
39+
}
40+
41+
var knownProxies = configuration.GetSection("ForwardedHeaders:KnownProxies").Get<string[]>() ?? [];
42+
if (knownProxies.Length != 0)
43+
{
44+
foreach (var proxy in knownProxies)
45+
{
46+
options.KnownProxies.Add(IPAddress.Parse(proxy));
47+
}
48+
}
49+
50+
var resolverForwardedHeader = configuration.GetValue("Application:ResolveForwardedHost", false);
51+
if (resolverForwardedHeader)
52+
{
53+
options.ForwardedHeaders |= ForwardedHeaders.XForwardedHost;
54+
}
55+
});
56+
57+
return services;
58+
}
59+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Reflection;
2+
using MediatR;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using OneGround.ZGW.Common.Web.Handlers;
5+
6+
namespace OneGround.ZGW.Common.Web.Extensions.ServiceCollection.ZGWApiExtensions;
7+
8+
public static class MediatorServiceCollectionExtensions
9+
{
10+
public static IServiceCollection AddMediator(this IServiceCollection services, Assembly callingAssembly, ZGWApiServiceSettings apiServiceSettings)
11+
{
12+
services.AddMediatR(x =>
13+
{
14+
x.RegisterServicesFromAssemblies(callingAssembly);
15+
});
16+
17+
if (apiServiceSettings.RegisterSharedAudittrailHandlers)
18+
{
19+
services.AddMediatR(x =>
20+
{
21+
x.RegisterServicesFromAssemblies(typeof(LogAuditTrailGetObjectListCommand).GetTypeInfo().Assembly); // The shared command handlers for audit trail for some APIs, not all
22+
});
23+
}
24+
25+
services.AddScoped(typeof(IPipelineBehavior<,>), typeof(HandlerLoggingBehavior<,>));
26+
27+
return services;
28+
}
29+
}

src/OneGround.ZGW.Common.Web/Extensions/ServiceCollection/SwaggerServiceCollectionExtensions.cs renamed to src/OneGround.ZGW.Common.Web/Extensions/ServiceCollection/ZGWApiExtensions/SwaggerServiceCollectionExtensions.cs

File renamed without changes.

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

Lines changed: 2 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22
using System.Net;
33
using System.Reflection;
44
using Asp.Versioning;
5-
using AutoMapper.Internal;
65
using FluentValidation;
7-
using MediatR;
8-
using Microsoft.AspNetCore.Builder;
9-
using Microsoft.AspNetCore.HttpOverrides;
106
using Microsoft.AspNetCore.Mvc;
117
using Microsoft.AspNetCore.Mvc.ModelBinding;
128
using Microsoft.Extensions.Configuration;
@@ -15,8 +11,8 @@
1511
using NetTopologySuite.Geometries;
1612
using OneGround.ZGW.Common.Extensions;
1713
using OneGround.ZGW.Common.Web.ErrorHandling;
14+
using OneGround.ZGW.Common.Web.Extensions.ServiceCollection.ZGWApiExtensions;
1815
using OneGround.ZGW.Common.Web.Filters;
19-
using OneGround.ZGW.Common.Web.Handlers;
2016
using OneGround.ZGW.Common.Web.Middleware;
2117
using OneGround.ZGW.Common.Web.Validations;
2218
using OneGround.ZGW.Common.Web.Versioning;
@@ -59,20 +55,7 @@ public static void AddZGWApi(
5955

6056
services.AddHealthChecks();
6157

62-
services.AddMediatR(x =>
63-
{
64-
x.RegisterServicesFromAssemblies(callingAssembly);
65-
});
66-
67-
if (zgwApiOptions.ApiServiceSettings.RegisterSharedAudittrailHandlers)
68-
{
69-
services.AddMediatR(x =>
70-
{
71-
x.RegisterServicesFromAssemblies(typeof(LogAuditTrailGetObjectListCommand).GetTypeInfo().Assembly); // The shared command handlers for audittrail for some API's not all
72-
});
73-
}
74-
75-
services.AddScoped(typeof(IPipelineBehavior<,>), typeof(HandlerLoggingBehavior<,>));
58+
services.AddMediator(callingAssembly, zgwApiOptions.ApiServiceSettings);
7659

7760
services.AddAutoMapper(callingAssembly);
7861

@@ -129,64 +112,4 @@ public static void AddZGWApi(
129112
var zgwVersion = ApplicationInformation.GetVersion();
130113
services.AddSwagger(apiName, zgwVersion, zgwApiOptions.SwaggerGenOptions, zgwApiOptions.AddSwaggerOptions);
131114
}
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
144-
);
145-
}
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-
}
192115
}

0 commit comments

Comments
 (0)