Use file scoped namepace

This commit is contained in:
2022-12-22 15:29:53 +01:00
parent 27bf5f0b24
commit 6d7e447ccc
51 changed files with 886 additions and 937 deletions

View File

@@ -2,28 +2,27 @@
using System.Linq;
using Microsoft.Extensions.Configuration;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
public static class IConfigurationExtensions
{
public static class IConfigurationExtensions
#region Methods
public static TEnum GetFlaggedEnum<TEnum>(this IConfiguration configuration, string key)
where TEnum : struct, IConvertible
{
#region Methods
ThrowsAnExceptionIfTypeIsNotAnEnumeration<TEnum>();
public static TEnum GetFlaggedEnum<TEnum>(this IConfiguration configuration, string key)
where TEnum : struct, IConvertible
{
ThrowsAnExceptionIfTypeIsNotAnEnumeration<TEnum>();
return (TEnum)(object)(configuration.GetSection(key)?
.Get<TEnum[]>() ?? Enumerable.Empty<TEnum>())
.Sum(i => (int)(object)i);
}
private static void ThrowsAnExceptionIfTypeIsNotAnEnumeration<TEnum>() where TEnum : struct, IConvertible
{
if (!typeof(TEnum).IsEnum)
throw new InvalidOperationException($"{typeof(TEnum)} is not supported.");
}
#endregion
return (TEnum)(object)(configuration.GetSection(key)?
.Get<TEnum[]>() ?? Enumerable.Empty<TEnum>())
.Sum(i => (int)(object)i);
}
}
private static void ThrowsAnExceptionIfTypeIsNotAnEnumeration<TEnum>() where TEnum : struct, IConvertible
{
if (!typeof(TEnum).IsEnum)
throw new InvalidOperationException($"{typeof(TEnum)} is not supported.");
}
#endregion
}

View File

@@ -2,26 +2,25 @@
using GerstITS.System.Configurations;
using Microsoft.Extensions.Configuration;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal sealed class EntityFrameworkMigrationConfiguration : IEntityFrameworkMigrationConfiguration
{
internal sealed class EntityFrameworkMigrationConfiguration : IEntityFrameworkMigrationConfiguration
#region Constructors
public EntityFrameworkMigrationConfiguration(string parentPrefix,
Microsoft.Extensions.Configuration.IConfiguration configuration)
{
#region Constructors
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
public EntityFrameworkMigrationConfiguration(string parentPrefix,
Microsoft.Extensions.Configuration.IConfiguration configuration)
{
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
AutoMigrate = configuration.GetValue<bool>($"{prefix}:{nameof(AutoMigrate)}");
}
#endregion
#region IMigrationConfiguration
public bool AutoMigrate { get; }
#endregion
AutoMigrate = configuration.GetValue<bool>($"{prefix}:{nameof(AutoMigrate)}");
}
#endregion
#region IMigrationConfiguration
public bool AutoMigrate { get; }
#endregion
}

View File

@@ -2,33 +2,32 @@
using Microsoft.Net.Http.Headers;
using Microsoft.OpenApi.Models;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal sealed class OpenApiSecuritySchemeConfiguration : IOpenApiSecuritySchemeConfiguration
{
internal sealed class OpenApiSecuritySchemeConfiguration : IOpenApiSecuritySchemeConfiguration
#region Properties
public bool AllowAnonymous { get; }
public string HttpHeaderKey { get; }
public string Scheme { get; }
public SecuritySchemeType SchemeType { get; }
public ParameterLocation ParameterLocation { get; }
public string Description { get; }
#endregion
#region Constructors
public OpenApiSecuritySchemeConfiguration()
{
#region Properties
AllowAnonymous = false;
HttpHeaderKey = HeaderNames.Authorization;
Scheme = "Bearer";
SchemeType = SecuritySchemeType.Http;
ParameterLocation = ParameterLocation.Header;
Description = "Authorization header using the Bearer scheme (Value: Bearer {{access_token}}).";
}
public bool AllowAnonymous { get; }
public string HttpHeaderKey { get; }
public string Scheme { get; }
public SecuritySchemeType SchemeType { get; }
public ParameterLocation ParameterLocation { get; }
public string Description { get; }
#endregion
#region Constructors
public OpenApiSecuritySchemeConfiguration()
{
AllowAnonymous = false;
HttpHeaderKey = HeaderNames.Authorization;
Scheme = "Bearer";
SchemeType = SecuritySchemeType.Http;
ParameterLocation = ParameterLocation.Header;
Description = "Authorization header using the Bearer scheme (Value: Bearer {{access_token}}).";
}
#endregion
}
#endregion
}

View File

@@ -1,34 +1,33 @@
using GerstITS.Authentication.OpenId;
using Microsoft.Extensions.Configuration;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal class OpenIdValidationConfiguration : IOpenIdValidationConfiguration
{
internal class OpenIdValidationConfiguration : IOpenIdValidationConfiguration
#region Constructors
public OpenIdValidationConfiguration(string parentPrefix,
IConfiguration configuration)
{
#region Constructors
var prefix = $"{parentPrefix}:Validate";
public OpenIdValidationConfiguration(string parentPrefix,
IConfiguration configuration)
{
var prefix = $"{parentPrefix}:Validate";
Issuer = configuration.GetValue<string>($"{prefix}:{nameof(Issuer)}");
Audience = configuration.GetValue<string>($"{prefix}:{nameof(Audience)}");
RsaPublicKey = configuration.GetValue<string>($"{prefix}:{nameof(RsaPublicKey)}");
RequiredClaimType = configuration.GetValue<string>($"{prefix}:{nameof(RequiredClaimType)}");
ValidateLifetime = configuration.GetValue<bool>($"{prefix}:{nameof(ValidateLifetime)}");
}
#endregion
#region IOpenIdValidationConfiguration
public string Issuer { get; }
public string Audience { get; }
public string RsaPublicKey { get; }
public string RequiredClaimType { get; }
public bool ValidateLifetime { get; }
#endregion
Issuer = configuration.GetValue<string>($"{prefix}:{nameof(Issuer)}");
Audience = configuration.GetValue<string>($"{prefix}:{nameof(Audience)}");
RsaPublicKey = configuration.GetValue<string>($"{prefix}:{nameof(RsaPublicKey)}");
RequiredClaimType = configuration.GetValue<string>($"{prefix}:{nameof(RequiredClaimType)}");
ValidateLifetime = configuration.GetValue<bool>($"{prefix}:{nameof(ValidateLifetime)}");
}
#endregion
#region IOpenIdValidationConfiguration
public string Issuer { get; }
public string Audience { get; }
public string RsaPublicKey { get; }
public string RequiredClaimType { get; }
public bool ValidateLifetime { get; }
#endregion
}

View File

@@ -2,34 +2,33 @@
using GerstITS.System.Configurations;
using Microsoft.Extensions.Configuration;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal class OpenIdConfiguration : IOpenIdConfiguration
{
internal class OpenIdConfiguration : IOpenIdConfiguration
#region Constructors
public OpenIdConfiguration(string parentPrefix,
Microsoft.Extensions.Configuration.IConfiguration configuration)
{
#region Constructors
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
public OpenIdConfiguration(string parentPrefix,
Microsoft.Extensions.Configuration.IConfiguration configuration)
{
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
Authority = configuration.GetValue<string>($"{prefix}:{nameof(Authority)}");
RequireHttpsMetadata = configuration.GetValue<bool>($"{prefix}:{nameof(RequireHttpsMetadata)}");
SaveToken = configuration.GetValue<bool>($"{prefix}:{nameof(SaveToken)}");
Authority = configuration.GetValue<string>($"{prefix}:{nameof(Authority)}");
RequireHttpsMetadata = configuration.GetValue<bool>($"{prefix}:{nameof(RequireHttpsMetadata)}");
SaveToken = configuration.GetValue<bool>($"{prefix}:{nameof(SaveToken)}");
Validate = new OpenIdValidationConfiguration(prefix, configuration);
}
Validate = new OpenIdValidationConfiguration(prefix, configuration);
}
#endregion
#endregion
#region IOpenIdConfiguration
#region IOpenIdConfiguration
public string Authority { get; }
public bool RequireHttpsMetadata { get; }
public bool SaveToken { get; }
public string Authority { get; }
public bool RequireHttpsMetadata { get; }
public bool SaveToken { get; }
public IOpenIdValidationConfiguration Validate { get; }
public IOpenIdValidationConfiguration Validate { get; }
#endregion
}
#endregion
}

View File

@@ -2,31 +2,30 @@
using GerstITS.Web.Api.Builder;
using Microsoft.Extensions.Configuration;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal sealed class CorsPolicyConfiguration : ICorsPolicy, GerstITS.System.Configurations.IConfiguration
{
internal sealed class CorsPolicyConfiguration : ICorsPolicy, GerstITS.System.Configurations.IConfiguration
#region Constructors
public CorsPolicyConfiguration(string parentPrefix, Microsoft.Extensions.Configuration.IConfiguration configuration)
{
#region Constructors
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
public CorsPolicyConfiguration(string parentPrefix, Microsoft.Extensions.Configuration.IConfiguration configuration)
{
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
AllowCredentials = configuration.GetValue<bool>($"{prefix}:{nameof(AllowCredentials)}", false);
AllowedOrigins = configuration.GetSection($"{prefix}:{nameof(AllowedOrigins)}").Get<string[]>() ?? new string[0];
AllowedHeaders = configuration.GetSection($"{prefix}:{nameof(AllowedHeaders)}").Get<string[]>() ?? new string[0];
AllowedMethods = configuration.GetSection($"{prefix}:{nameof(AllowedMethods)}").Get<string[]>() ?? new string[0];
}
#endregion
#region ICorsPolicy
public bool AllowCredentials { get; }
public string[] AllowedOrigins { get; set; }
public string[] AllowedHeaders { get; set; }
public string[] AllowedMethods { get; set; }
#endregion
AllowCredentials = configuration.GetValue<bool>($"{prefix}:{nameof(AllowCredentials)}", false);
AllowedOrigins = configuration.GetSection($"{prefix}:{nameof(AllowedOrigins)}").Get<string[]>() ?? new string[0];
AllowedHeaders = configuration.GetSection($"{prefix}:{nameof(AllowedHeaders)}").Get<string[]>() ?? new string[0];
AllowedMethods = configuration.GetSection($"{prefix}:{nameof(AllowedMethods)}").Get<string[]>() ?? new string[0];
}
#endregion
#region ICorsPolicy
public bool AllowCredentials { get; }
public string[] AllowedOrigins { get; set; }
public string[] AllowedHeaders { get; set; }
public string[] AllowedMethods { get; set; }
#endregion
}

View File

@@ -3,28 +3,27 @@ using GerstITS.Web.Api.Builder;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.HttpOverrides;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal sealed class WebApiHeadersConfiguration : IHeaderConfiguration, IConfiguration
{
internal sealed class WebApiHeadersConfiguration : IHeaderConfiguration, IConfiguration
#region Constructors
public WebApiHeadersConfiguration(string parentPrefix, Microsoft.Extensions.Configuration.IConfiguration configuration)
{
#region Constructors
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
public WebApiHeadersConfiguration(string parentPrefix, Microsoft.Extensions.Configuration.IConfiguration configuration)
ForwardedHeaders = new ForwardedHeadersOptions
{
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
ForwardedHeaders = new ForwardedHeadersOptions
{
ForwardedHeaders = configuration.GetFlaggedEnum<ForwardedHeaders>($"{prefix}:{nameof(ForwardedHeadersOptions)}:{nameof(ForwardedHeadersOptions.ForwardedHeaders)}")
};
}
#endregion
#region IHeaderConfiguration
public ForwardedHeadersOptions ForwardedHeaders { get; }
#endregion
ForwardedHeaders = configuration.GetFlaggedEnum<ForwardedHeaders>($"{prefix}:{nameof(ForwardedHeadersOptions)}:{nameof(ForwardedHeadersOptions.ForwardedHeaders)}")
};
}
#endregion
#region IHeaderConfiguration
public ForwardedHeadersOptions ForwardedHeaders { get; }
#endregion
}

View File

@@ -2,34 +2,33 @@
using GerstITS.Web.Api.Builder;
using Microsoft.Extensions.Configuration;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal sealed class ServerConfiguration : IServerConfiguration
{
internal sealed class ServerConfiguration : IServerConfiguration
#region Constructors
public ServerConfiguration(string parentPrefix, Microsoft.Extensions.Configuration.IConfiguration configuration)
{
#region Constructors
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
public ServerConfiguration(string parentPrefix, Microsoft.Extensions.Configuration.IConfiguration configuration)
{
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
UseHttpsRedirection = configuration.GetValue<bool>($"{prefix}:{nameof(UseHttpsRedirection)}");
UseHsts = configuration.GetValue<bool>($"{prefix}:{nameof(UseHsts)}");
UseCors = configuration.GetValue<bool>($"{prefix}:{nameof(UseCors)}");
UseHttpsRedirection = configuration.GetValue<bool>($"{prefix}:{nameof(UseHttpsRedirection)}");
UseHsts = configuration.GetValue<bool>($"{prefix}:{nameof(UseHsts)}");
UseCors = configuration.GetValue<bool>($"{prefix}:{nameof(UseCors)}");
Headers = new WebApiHeadersConfiguration(prefix, configuration);
CorsPolicy = new CorsPolicyConfiguration(prefix, configuration);
}
#endregion
#region IServerConfiguration
public bool UseHttpsRedirection { get; }
public bool UseHsts { get; }
public bool UseCors { get; }
public IHeaderConfiguration Headers { get; }
public ICorsPolicy CorsPolicy { get; }
#endregion
Headers = new WebApiHeadersConfiguration(prefix, configuration);
CorsPolicy = new CorsPolicyConfiguration(prefix, configuration);
}
#endregion
#region IServerConfiguration
public bool UseHttpsRedirection { get; }
public bool UseHsts { get; }
public bool UseCors { get; }
public IHeaderConfiguration Headers { get; }
public ICorsPolicy CorsPolicy { get; }
#endregion
}

View File

@@ -3,27 +3,26 @@ using GerstITS.System.Configurations;
using GerstITS.Web.Api.Swagger;
using Microsoft.Extensions.Configuration;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal sealed class LicenseConfiguration : ILicense, System.Configurations.IConfiguration
{
internal sealed class LicenseConfiguration : ILicense, System.Configurations.IConfiguration
#region Constructors
public LicenseConfiguration(string parentPrefix, Microsoft.Extensions.Configuration.IConfiguration configuration)
{
#region Constructors
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
public LicenseConfiguration(string parentPrefix, Microsoft.Extensions.Configuration.IConfiguration configuration)
{
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
Name = configuration.GetValue<string>($"{prefix}:{nameof(Name)}");
Url = configuration.GetValue<Uri>($"{prefix}:{nameof(Url)}");
}
Name = configuration.GetValue<string>($"{prefix}:{nameof(Name)}");
Url = configuration.GetValue<Uri>($"{prefix}:{nameof(Url)}");
}
#endregion
#endregion
#region ILicence
#region ILicence
public string Name { get; }
public Uri Url { get; }
public string Name { get; }
public Uri Url { get; }
#endregion
}
#endregion
}

View File

@@ -4,42 +4,41 @@ using GerstITS.System.Configurations;
using GerstITS.Web.Api.Swagger;
using Microsoft.Extensions.Configuration;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal sealed class SwaggerConfiguration : ISwaggerConfiguration
{
internal sealed class SwaggerConfiguration : ISwaggerConfiguration
#region Constructors
public SwaggerConfiguration(string parentPrefix,
Microsoft.Extensions.Configuration.IConfiguration configuration)
{
#region Constructors
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
public SwaggerConfiguration(string parentPrefix,
Microsoft.Extensions.Configuration.IConfiguration configuration)
{
var prefix = $"{parentPrefix}:{this.ToConfigurationPrefix()}";
var currentAssembly = typeof(WebApiConfiguration).Assembly;
var fileVersionInfo = FileVersionInfo.GetVersionInfo(currentAssembly.Location);
var currentAssembly = typeof(WebApiConfiguration).Assembly;
var fileVersionInfo = FileVersionInfo.GetVersionInfo(currentAssembly.Location);
Name = fileVersionInfo.ProductName;
Company = fileVersionInfo.CompanyName;
SupportEMail = configuration.GetValue<string>($"{prefix}:{nameof(SupportEMail)}");
TermsOfService = configuration.GetValue<Uri>($"{prefix}:{nameof(TermsOfService)}");
Name = fileVersionInfo.ProductName;
Company = fileVersionInfo.CompanyName;
SupportEMail = configuration.GetValue<string>($"{prefix}:{nameof(SupportEMail)}");
TermsOfService = configuration.GetValue<Uri>($"{prefix}:{nameof(TermsOfService)}");
Release = currentAssembly.GetName().Version;
License = new LicenseConfiguration(prefix, configuration);
Security = new OpenApiSecuritySchemeConfiguration();
}
#endregion
#region ISwaggerConfiguration
public string Name { get; }
public string Company { get; }
public string SupportEMail { get; }
public Uri TermsOfService { get; }
public Version Release { get; }
public ILicense License { get; }
public IOpenApiSecuritySchemeConfiguration Security { get; }
#endregion
Release = currentAssembly.GetName().Version;
License = new LicenseConfiguration(prefix, configuration);
Security = new OpenApiSecuritySchemeConfiguration();
}
#endregion
#region ISwaggerConfiguration
public string Name { get; }
public string Company { get; }
public string SupportEMail { get; }
public Uri TermsOfService { get; }
public Version Release { get; }
public ILicense License { get; }
public IOpenApiSecuritySchemeConfiguration Security { get; }
#endregion
}

View File

@@ -4,31 +4,30 @@ using GerstITS.System.Configurations;
using GerstITS.Web.Api.Builder;
using GerstITS.Web.Api.Swagger;
namespace GerstITS.Examples.Api.Configurations
namespace GerstITS.Examples.Api.Configurations;
internal sealed class WebApiConfiguration : IConfiguration
{
internal sealed class WebApiConfiguration : IConfiguration
#region Properties
public IServerConfiguration Server { get; }
public IOpenIdConfiguration OpenId { get; }
public ISwaggerConfiguration Swagger { get; set; }
public IEntityFrameworkMigrationConfiguration EntityFrameworkMigration { get; set; }
#endregion
#region Constructors
public WebApiConfiguration(Microsoft.Extensions.Configuration.IConfiguration configuration)
{
#region Properties
var prefix = this.ToConfigurationPrefix();
public IServerConfiguration Server { get; }
public IOpenIdConfiguration OpenId { get; }
public ISwaggerConfiguration Swagger { get; set; }
public IEntityFrameworkMigrationConfiguration EntityFrameworkMigration { get; set; }
#endregion
#region Constructors
public WebApiConfiguration(Microsoft.Extensions.Configuration.IConfiguration configuration)
{
var prefix = this.ToConfigurationPrefix();
EntityFrameworkMigration = new EntityFrameworkMigrationConfiguration(prefix, configuration);
OpenId = new OpenIdConfiguration(prefix, configuration);
Server = new ServerConfiguration(prefix, configuration);
Swagger = new SwaggerConfiguration(prefix, configuration);
}
#endregion
EntityFrameworkMigration = new EntityFrameworkMigrationConfiguration(prefix, configuration);
OpenId = new OpenIdConfiguration(prefix, configuration);
Server = new ServerConfiguration(prefix, configuration);
Swagger = new SwaggerConfiguration(prefix, configuration);
}
#endregion
}