Refactor project files for improved readability and structure
- Cleaned up whitespace in Directory.Build.props and Directory.Packages.props for consistency. - Reformatted project file references in PnvPanel.Api.csproj for better clarity. - Enhanced code readability in various endpoint files by adjusting line breaks and indentation. - Standardized method signatures and improved formatting in ResultExtensions and multiple endpoint classes for better maintainability.
This commit is contained in:
@@ -25,14 +25,22 @@ namespace PnvPanel.Infrastructure;
|
||||
/// </summary>
|
||||
public static class DependencyInjection
|
||||
{
|
||||
public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration)
|
||||
public static IServiceCollection AddInfrastructure(
|
||||
this IServiceCollection services,
|
||||
IConfiguration configuration
|
||||
)
|
||||
{
|
||||
// Строка подключения читается лениво внутри лямбды (а не в локальную переменную сразу), иначе
|
||||
// в тестах WebApplicationFactory.ConfigureAppConfiguration (Testcontainers-порт) не успевает
|
||||
// примениться до регистрации DbContext — окажется закэширован дефолт из appsettings.json.
|
||||
services.AddDbContext<AppDbContext>(options => options.UseNpgsql(
|
||||
configuration["ConnectionStrings:Default"]
|
||||
?? throw new InvalidOperationException("Строка подключения 'ConnectionStrings:Default' не сконфигурирована.")));
|
||||
services.AddDbContext<AppDbContext>(options =>
|
||||
options.UseNpgsql(
|
||||
configuration["ConnectionStrings:Default"]
|
||||
?? throw new InvalidOperationException(
|
||||
"Строка подключения 'ConnectionStrings:Default' не сконфигурирована."
|
||||
)
|
||||
)
|
||||
);
|
||||
services.AddScoped<IAppDbContext>(sp => sp.GetRequiredService<AppDbContext>());
|
||||
|
||||
services
|
||||
@@ -53,10 +61,13 @@ public static class DependencyInjection
|
||||
.AddDefaultTokenProviders();
|
||||
|
||||
services.Configure<JwtOptions>(configuration.GetSection(JwtOptions.SectionName));
|
||||
services.Configure<AdminSeedOptions>(configuration.GetSection(AdminSeedOptions.SectionName));
|
||||
services.Configure<AdminSeedOptions>(
|
||||
configuration.GetSection(AdminSeedOptions.SectionName)
|
||||
);
|
||||
services.Configure<RolesOptions>(configuration.GetSection(RolesOptions.SectionName));
|
||||
|
||||
var jwtOptions = configuration.GetSection(JwtOptions.SectionName).Get<JwtOptions>()
|
||||
var jwtOptions =
|
||||
configuration.GetSection(JwtOptions.SectionName).Get<JwtOptions>()
|
||||
?? throw new InvalidOperationException("Секция конфигурации 'Jwt' не задана.");
|
||||
|
||||
services
|
||||
@@ -70,7 +81,9 @@ public static class DependencyInjection
|
||||
ValidateAudience = true,
|
||||
ValidAudience = jwtOptions.Audience,
|
||||
ValidateIssuerSigningKey = true,
|
||||
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.SigningKey)),
|
||||
IssuerSigningKey = new SymmetricSecurityKey(
|
||||
Encoding.UTF8.GetBytes(jwtOptions.SigningKey)
|
||||
),
|
||||
ValidateLifetime = true,
|
||||
ClockSkew = TimeSpan.FromSeconds(30),
|
||||
};
|
||||
@@ -82,7 +95,10 @@ public static class DependencyInjection
|
||||
OnMessageReceived = context =>
|
||||
{
|
||||
var accessToken = context.Request.Query["access_token"];
|
||||
if (!string.IsNullOrEmpty(accessToken) && context.HttpContext.Request.Path.StartsWithSegments("/hubs"))
|
||||
if (
|
||||
!string.IsNullOrEmpty(accessToken)
|
||||
&& context.HttpContext.Request.Path.StartsWithSegments("/hubs")
|
||||
)
|
||||
context.Token = accessToken;
|
||||
|
||||
return Task.CompletedTask;
|
||||
@@ -106,7 +122,10 @@ public static class DependencyInjection
|
||||
services.AddSingleton<IXuiConnectionStringBuilder, VmessConnectionStringBuilder>();
|
||||
services.AddSingleton<IXuiConnectionStringBuilder, TrojanConnectionStringBuilder>();
|
||||
services.AddSingleton<IXuiConnectionStringBuilder, ShadowsocksConnectionStringBuilder>();
|
||||
services.AddSingleton<IXuiConnectionStringBuilderResolver, XuiConnectionStringBuilderResolver>();
|
||||
services.AddSingleton<
|
||||
IXuiConnectionStringBuilderResolver,
|
||||
XuiConnectionStringBuilderResolver
|
||||
>();
|
||||
|
||||
services.AddSingleton<ISecretProtector, DataProtectionSecretProtector>();
|
||||
// Singleton: держит кэш per-node XUI-клиентов между запросами (см. XuiPanelGateway).
|
||||
@@ -123,14 +142,18 @@ public static class DependencyInjection
|
||||
services.AddScoped<ICurrentUserSetter>(sp => sp.GetRequiredService<CurrentUser>());
|
||||
services.AddScoped<DbInitializer>();
|
||||
|
||||
services.Configure<TrafficRetentionOptions>(configuration.GetSection(TrafficRetentionOptions.SectionName));
|
||||
services.Configure<TrafficRetentionOptions>(
|
||||
configuration.GetSection(TrafficRetentionOptions.SectionName)
|
||||
);
|
||||
services.AddHostedService<TrafficSyncService>();
|
||||
services.AddHostedService<NodeHealthCheckService>();
|
||||
services.AddHostedService<TrafficRetentionService>();
|
||||
|
||||
services.Configure<TelegramOptions>(configuration.GetSection(TelegramOptions.SectionName));
|
||||
|
||||
services.Configure<FileStorageOptions>(configuration.GetSection(FileStorageOptions.SectionName));
|
||||
services.Configure<FileStorageOptions>(
|
||||
configuration.GetSection(FileStorageOptions.SectionName)
|
||||
);
|
||||
services.AddSingleton<IFileStorage, DiskFileStorage>();
|
||||
|
||||
return services;
|
||||
|
||||
Reference in New Issue
Block a user