From 7673056ab70b11d355099204855a7d82f819b15a Mon Sep 17 00:00:00 2001 From: Ira2222 <115322339+Ira2222@users.noreply.github.com> Date: Tue, 28 Oct 2025 13:45:57 -0400 Subject: [PATCH] chore(maint): patch deps and tighten security config --- .github/workflows/ci.yml | 14 + docs/maintenance/2024-11-maintenance-sweep.md | 23 ++ docs/reports/2025-11-maintenance.md | 15 ++ src/App2.Api/App2.Api.csproj | 8 +- .../Endpoints/Todos/TodosEndpointGroup.cs | 38 ++- src/App2.Api/Extensions/CorsExtensions.cs | 20 ++ src/App2.Api/Extensions/DataExtensions.cs | 28 +- src/App2.Api/Options/DatabaseOptions.cs | 28 ++ src/App2.Api/Program.cs | 31 ++- src/App2.Api/packages.lock.json | 153 +++++------ .../App2.Tests.Integration.csproj | 4 +- .../App2.Tests.Integration/packages.lock.json | 253 +++++++++--------- tests/App2.Tests.Unit/App2.Tests.Unit.csproj | 2 +- 13 files changed, 368 insertions(+), 249 deletions(-) create mode 100644 docs/maintenance/2024-11-maintenance-sweep.md create mode 100644 docs/reports/2025-11-maintenance.md create mode 100644 src/App2.Api/Options/DatabaseOptions.cs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fd05498..1f9242e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,6 +69,20 @@ jobs: name: web-dist path: apps/web/dist + package-audit: + name: Package audit (dotnet) + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + - name: Setup .NET + uses: actions/setup-dotnet@v5 + with: + dotnet-version: '8.0.x' + - name: dotnet package list --outdated + run: dotnet package list --outdated --include-transitive --highest-patch + sbom: name: Generate SBOM (repo) runs-on: ubuntu-latest diff --git a/docs/maintenance/2024-11-maintenance-sweep.md b/docs/maintenance/2024-11-maintenance-sweep.md new file mode 100644 index 0000000..98e5f5f --- /dev/null +++ b/docs/maintenance/2024-11-maintenance-sweep.md @@ -0,0 +1,23 @@ +# Maintenance Sweep — November 2024 + +## Review highlights +- Output cache feature flag hardened so disabling the feature no longer breaks DI or endpoint caching configuration. +- Security headers middleware now runs earlier in the pipeline to guarantee headers on redirect responses. + +## Outstanding issues to track +1. Minimal API endpoints always enabled output caching, which crashed when the feature flag was off (fixed in this sweep). +2. Security headers were applied after HTTPS redirection, so redirect responses missed CSP/HSTS hardening (fixed in this sweep). +3. Align `Microsoft.EntityFrameworkCore.Design` and `Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore` with the 8.0.11 patch that Infrastructure already consumes. +4. `Microsoft.AspNetCore.OutputCaching.StackExchangeRedis` is still on the 8.0.0 RTM build; bump to 8.0.11 for the latest fixes. +5. Test projects lag on EF Core packages (`InMemory`, `Microsoft.AspNetCore.Mvc.Testing`, `Microsoft.Data.Sqlite`)—all have 8.0.11 patches available. +6. Azure SDK dependencies (`Azure.Identity`, `Azure.Core`) should be checked for the latest servicing release; Dependabot will surface once policy allows. + +## Dependency observations +- `.NET` — Recommend upgrading the EF Core and output caching packages noted above to their 8.0.11 service releases. +- `npm` — `npm outdated` shows React 18.x stack is current within its major; no action required now. +- Dependabot is enabled for NuGet, npm, and GitHub Actions and will keep surfacing new advisories. + +## Next steps +- Schedule a follow-up PR to apply the recommended package bumps and regenerate lock files once a .NET SDK is available in CI. +- Review outstanding CodeQL and Trivy SARIF reports to ensure no new actionable alerts have appeared since the last scan. +- Consider adding smoke tests that exercise the API with OutputCaching disabled to guard against regressions like the one fixed here. diff --git a/docs/reports/2025-11-maintenance.md b/docs/reports/2025-11-maintenance.md new file mode 100644 index 0000000..1df67f6 --- /dev/null +++ b/docs/reports/2025-11-maintenance.md @@ -0,0 +1,15 @@ +# November 2025 Maintenance Sweep + +## Dependency refresh +- **Azure.Identity** → 1.17.0 ([release notes](https://github.com/Azure/azure-sdk-for-net/releases/tag/Azure.Identity_1.17.0)) +- **Microsoft.AspNetCore.OutputCaching.StackExchangeRedis** → 8.0.16 ([release notes](https://github.com/dotnet/aspnetcore/releases/tag/v8.0.16)) +- **Entity Framework Core toolchain/tests** → 8.0.11 (`Microsoft.EntityFrameworkCore.Design`, `Microsoft.EntityFrameworkCore.InMemory`, `Microsoft.AspNetCore.Mvc.Testing`, `Microsoft.Data.Sqlite`) ([release notes](https://github.com/dotnet/efcore/releases/tag/v8.0.11)) + +## Security & platform hygiene +- Ensure NetEscapades security headers execute first in the request pipeline for consistent coverage. +- Tighten the CORS allow-list policy to always emit `Vary: Origin` and reject wildcard origins when credentials are allowed. +- Add `DatabaseOptions` with options validation so production/startup fails fast if the selected provider lacks a connection string. + +## Follow-up considerations +- Monitor Azure SDK release cadence for identity/authentication improvements (next review February 2026). +- Consider onboarding `dotnet outdated` tool manifest to capture advisory metadata in future sweeps. diff --git a/src/App2.Api/App2.Api.csproj b/src/App2.Api/App2.Api.csproj index 3d276e9..acc16d7 100644 --- a/src/App2.Api/App2.Api.csproj +++ b/src/App2.Api/App2.Api.csproj @@ -6,14 +6,14 @@ - - + + all - + - + diff --git a/src/App2.Api/Endpoints/Todos/TodosEndpointGroup.cs b/src/App2.Api/Endpoints/Todos/TodosEndpointGroup.cs index 03b8fa3..b3b3d5e 100644 --- a/src/App2.Api/Endpoints/Todos/TodosEndpointGroup.cs +++ b/src/App2.Api/Endpoints/Todos/TodosEndpointGroup.cs @@ -1,25 +1,30 @@ +using System; using App2.Api.Constants; using App2.Application.Features.Todos.Commands; using App2.Application.Features.Todos.Dtos; using App2.Application.Features.Todos.Queries; using MediatR; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.OutputCaching; +using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.DependencyInjection; namespace App2.Api.Endpoints.Todos; public static class TodosEndpointGroup { - public static IEndpointRouteBuilder MapTodosEndpoints(this IEndpointRouteBuilder builder, bool requireAuthorization) + public static IEndpointRouteBuilder MapTodosEndpoints(this IEndpointRouteBuilder builder, bool requireAuthorization, bool enableOutputCache) { var group = builder.MapGroup(AppConstants.Routes.TodosBase) .WithTags("Todos"); var getEndpoint = group.MapGet("/", GetTodosAsync) .RequireRateLimiting(AppConstants.RateLimiting.FixedPolicy) - .CacheOutput(AppConstants.Cache.TodosPolicy) .Produces>(StatusCodes.Status200OK); + getEndpoint = ConfigureCaching(getEndpoint, enableOutputCache); + if (requireAuthorization) { getEndpoint.RequireAuthorization("Todo.Read"); @@ -45,10 +50,11 @@ public static IEndpointRouteBuilder MapTodosEndpoints(this IEndpointRouteBuilder var getByIdEndpoint = group.MapGet("/{id:int}", GetTodoByIdAsync) .RequireRateLimiting(AppConstants.RateLimiting.FixedPolicy) - .CacheOutput(AppConstants.Cache.TodosPolicy) .Produces(StatusCodes.Status200OK) .Produces(StatusCodes.Status404NotFound); + getByIdEndpoint = ConfigureCaching(getByIdEndpoint, enableOutputCache); + if (requireAuthorization) { getByIdEndpoint.RequireAuthorization("Todo.Read"); @@ -99,11 +105,11 @@ private static async Task>> GetTodosAsync(IMediator me private static async Task> CreateTodoAsync( CreateTodoCommand command, IMediator mediator, - IOutputCacheStore cache, + IServiceProvider services, CancellationToken cancellationToken) { var created = await mediator.Send(command, cancellationToken); - await cache.EvictByTagAsync(AppConstants.Cache.TodosTag, cancellationToken); + await EvictTodosCacheAsync(services, cancellationToken); return TypedResults.Created($"{AppConstants.Routes.TodosBase}/{created.Id}", created); } @@ -122,7 +128,7 @@ private static async Task, NotFound>> UpdateTodoAsync( int id, UpdateTodoCommand command, IMediator mediator, - IOutputCacheStore cache, + IServiceProvider services, CancellationToken cancellationToken) { // Ensure the ID from the route matches the command @@ -134,14 +140,14 @@ private static async Task, NotFound>> UpdateTodoAsync( return TypedResults.NotFound(); } - await cache.EvictByTagAsync(AppConstants.Cache.TodosTag, cancellationToken); + await EvictTodosCacheAsync(services, cancellationToken); return TypedResults.Ok(updated); } private static async Task> DeleteTodoAsync( int id, IMediator mediator, - IOutputCacheStore cache, + IServiceProvider services, CancellationToken cancellationToken) { var deleted = await mediator.Send(new DeleteTodoCommand(id), cancellationToken); @@ -150,7 +156,21 @@ private static async Task> DeleteTodoAsync( return TypedResults.NotFound(); } - await cache.EvictByTagAsync(AppConstants.Cache.TodosTag, cancellationToken); + await EvictTodosCacheAsync(services, cancellationToken); return TypedResults.NoContent(); } + + private static RouteHandlerBuilder ConfigureCaching(RouteHandlerBuilder builder, bool enableOutputCache) + => enableOutputCache ? builder.CacheOutput(AppConstants.Cache.TodosPolicy) : builder; + + private static async Task EvictTodosCacheAsync(IServiceProvider services, CancellationToken cancellationToken) + { + var cache = services.GetService(); + if (cache is null) + { + return; + } + + await cache.EvictByTagAsync(AppConstants.Cache.TodosTag, cancellationToken); + } } diff --git a/src/App2.Api/Extensions/CorsExtensions.cs b/src/App2.Api/Extensions/CorsExtensions.cs index 8659201..8d962e3 100644 --- a/src/App2.Api/Extensions/CorsExtensions.cs +++ b/src/App2.Api/Extensions/CorsExtensions.cs @@ -1,3 +1,10 @@ +using System; +using System.Linq; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + namespace App2.Api.Extensions; public static class CorsExtensions @@ -34,4 +41,17 @@ public static IServiceCollection AddCorsAllowList(this IServiceCollection servic return services; } + + public static IApplicationBuilder UseCorsVaryHeader(this IApplicationBuilder app) + { + return app.Use(async (context, next) => + { + await next(); + + if (context.Response.Headers.ContainsKey("Access-Control-Allow-Origin")) + { + context.Response.Headers.AppendCommaSeparatedValues("Vary", "Origin"); + } + }); + } } diff --git a/src/App2.Api/Extensions/DataExtensions.cs b/src/App2.Api/Extensions/DataExtensions.cs index 939ce41..30cac29 100644 --- a/src/App2.Api/Extensions/DataExtensions.cs +++ b/src/App2.Api/Extensions/DataExtensions.cs @@ -1,20 +1,34 @@ +using System; +using App2.Api.Options; using App2.Infrastructure.Data; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Options; namespace App2.Api.Extensions; public static class DataExtensions { - public static IServiceCollection AddAppData(this IServiceCollection services, IConfiguration configuration, IHostEnvironment environment) + public static IServiceCollection AddAppData(this IServiceCollection services, IHostEnvironment environment) { services.AddDbContext((serviceProvider, options) => { - var provider = configuration["Data:Provider"] ?? "Sqlite"; - var connectionStrings = configuration.GetSection("Data:ConnectionStrings"); + var databaseOptions = serviceProvider.GetRequiredService>().Value; + var provider = databaseOptions.Provider ?? "Sqlite"; if (provider.Equals("Postgres", StringComparison.OrdinalIgnoreCase)) { - var connection = connectionStrings["Postgres"] ?? "Host=localhost;Database=app2;Username=postgres;Password=postgres"; + var connection = databaseOptions.ConnectionStrings.Postgres; + if (string.IsNullOrWhiteSpace(connection) && environment.IsDevelopment()) + { + connection = "Host=localhost;Database=app2;Username=postgres;Password=postgres"; + } + + if (string.IsNullOrWhiteSpace(connection)) + { + throw new InvalidOperationException("Data:ConnectionStrings:Postgres must be configured when using the Postgres provider."); + } options.UseNpgsql(connection, npgsql => { npgsql.EnableRetryOnFailure(); @@ -22,7 +36,11 @@ public static IServiceCollection AddAppData(this IServiceCollection services, IC } else { - var path = configuration["Data:ConnectionStrings:Sqlite"] ?? "Data Source=app2.db"; + var path = databaseOptions.ConnectionStrings.Sqlite; + if (string.IsNullOrWhiteSpace(path)) + { + path = "Data Source=app2.db"; + } options.UseSqlite(path); } diff --git a/src/App2.Api/Options/DatabaseOptions.cs b/src/App2.Api/Options/DatabaseOptions.cs new file mode 100644 index 0000000..d97d069 --- /dev/null +++ b/src/App2.Api/Options/DatabaseOptions.cs @@ -0,0 +1,28 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace App2.Api.Options; + +public sealed class DatabaseOptions +{ + public const string SectionName = "Data"; + + [Required] + [RegularExpression("Sqlite|Postgres", ErrorMessage = "Data:Provider must be either 'Sqlite' or 'Postgres'.")] + public string Provider { get; set; } = "Sqlite"; + + [Required] + public ConnectionStringsOptions ConnectionStrings { get; set; } = new(); + + public sealed class ConnectionStringsOptions + { + public string? Sqlite { get; set; } + + public string? Postgres { get; set; } + } + + public string? GetConnectionStringForProvider() + => Provider.Equals("Postgres", StringComparison.OrdinalIgnoreCase) + ? ConnectionStrings.Postgres + : ConnectionStrings.Sqlite; +} diff --git a/src/App2.Api/Program.cs b/src/App2.Api/Program.cs index fcd98e6..0ccd0c4 100644 --- a/src/App2.Api/Program.cs +++ b/src/App2.Api/Program.cs @@ -2,6 +2,7 @@ using System.Reflection; using App2.Api.Endpoints.Todos; using App2.Api.Extensions; +using App2.Api.Options; using App2.Application.Common.Behaviors; using App2.Application.Features.Todos.Commands; using App2.Application.Features.Todos.Validators; @@ -70,8 +71,19 @@ builder.Services.AddScoped(); var features = builder.Configuration.GetSection("Features"); - -builder.Services.AddAppData(builder.Configuration, builder.Environment); +var outputCachingEnabled = features.GetValue("OutputCaching", false); + +builder.Services.AddOptions() + .Bind(builder.Configuration.GetSection(DatabaseOptions.SectionName)) + .ValidateDataAnnotations() + .Validate( + options => builder.Environment.IsDevelopment() + || builder.Environment.IsEnvironment("Testing") + || !string.IsNullOrWhiteSpace(options.GetConnectionStringForProvider()), + "A database connection string must be configured for the selected provider in non-development environments.") + .ValidateOnStart(); + +builder.Services.AddAppData(builder.Environment); builder.Services.AddOutputCacheWithOptionalRedis(builder.Configuration); var authenticationEnabled = false; @@ -112,18 +124,19 @@ var app = builder.Build(); -app.UseSerilogRequestLogging(); -app.UseExceptionHandler(); -app.UseStatusCodePages(); -app.UseHttpsRedirection(); - if (features.GetValue("SecurityHeaders", false)) { app.UseSecurityHeaders(builder.Configuration); } +app.UseSerilogRequestLogging(); +app.UseExceptionHandler(); +app.UseStatusCodePages(); +app.UseHttpsRedirection(); + if (features.GetValue("CORS", false)) { + app.UseCorsVaryHeader(); app.UseCors("AllowedOrigins"); } @@ -138,7 +151,7 @@ app.UseRateLimiter(); } -if (features.GetValue("OutputCaching", false)) +if (outputCachingEnabled) { app.UseOutputCache(); } @@ -156,7 +169,7 @@ })); app.MapHealthEndpoints(); -app.MapTodosEndpoints(authenticationEnabled); +app.MapTodosEndpoints(authenticationEnabled, outputCachingEnabled); app.MapControllers(); app.ValidateRequiredConfiguration(builder.Configuration, app.Environment); diff --git a/src/App2.Api/packages.lock.json b/src/App2.Api/packages.lock.json index 92cb0be..0f23ea4 100644 --- a/src/App2.Api/packages.lock.json +++ b/src/App2.Api/packages.lock.json @@ -15,17 +15,13 @@ }, "Azure.Identity": { "type": "Direct", - "requested": "[1.11.4, )", - "resolved": "1.11.4", - "contentHash": "Sf4BoE6Q3jTgFkgBkx7qztYOFELBCo+wQgpYDwal/qJ1unBH73ywPztIJKXBXORRzAeNijsuxhk94h0TIMvfYg==", + "requested": "[1.17.0, )", + "resolved": "1.17.0", + "contentHash": "QZiMa1O5lTniWTSDPyPVdBKOS0/M5DWXTfQ2xLOot96yp8Q5A69iScGtzCIxfbg/4bmp/TynibZ2VK1v3qsSNA==", "dependencies": { - "Azure.Core": "1.38.0", - "Microsoft.Identity.Client": "4.61.3", - "Microsoft.Identity.Client.Extensions.Msal": "4.61.3", - "System.Memory": "4.5.4", - "System.Security.Cryptography.ProtectedData": "4.7.0", - "System.Text.Json": "4.7.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Azure.Core": "1.49.0", + "Microsoft.Identity.Client": "4.76.0", + "Microsoft.Identity.Client.Extensions.Msal": "4.76.0" } }, "FluentValidation.DependencyInjectionExtensions": { @@ -50,37 +46,37 @@ }, "Microsoft.AspNetCore.OutputCaching.StackExchangeRedis": { "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "gl+MEv02izgJSN+ADLzLeAfIehXRdhwEUK6E4BhEnf7CFw3TwsebAcbbB5W/HbgvEMBwR7WrTwiVprm+eLkFeg==", + "requested": "[8.0.16, )", + "resolved": "8.0.16", + "contentHash": "iDfZhkKtmNXtvGCsm0DzSp5bJXj9wNqiLniNjAmguf7/uXdWDNd0WCKbOQmioH4eUkW8Jr/Vuj0fCPRDNlIzJA==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "StackExchange.Redis": "2.6.122" + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "Microsoft.Extensions.Options": "8.0.2", + "StackExchange.Redis": "2.7.27" } }, "Microsoft.EntityFrameworkCore.Design": { "type": "Direct", - "requested": "[8.0.6, )", - "resolved": "8.0.6", - "contentHash": "4OT+mH+8EB4Kfn1ENpDx2Ssx459j200gvdhDOKq5lkHmHzkRpmEDKS5GfqaLZvBLJKWu1FVGQ7Wnczcjb0hX4g==", + "requested": "[8.0.11, )", + "resolved": "8.0.11", + "contentHash": "KxOvpbaKiUmbLvenr0T/4F1Vdm0Sq+iajLbesQK7/WKB/Dx+FQHCZ0f5jCXrVWK2QKF9eHzQ5JPA1L6hcb25FQ==", "dependencies": { "Humanizer.Core": "2.14.1", "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.5.0", - "Microsoft.EntityFrameworkCore.Relational": "8.0.6", - "Microsoft.Extensions.DependencyModel": "8.0.0", + "Microsoft.EntityFrameworkCore.Relational": "8.0.11", + "Microsoft.Extensions.DependencyModel": "8.0.2", "Mono.TextTemplating": "2.2.1" } }, "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore": { "type": "Direct", - "requested": "[8.0.6, )", - "resolved": "8.0.6", - "contentHash": "paBCLbj7dMnPSlZ+dkD/Q8KNmI/UZbnCrBVMbX/GZ/6Cs787GSrWawX1UtiCDPfsVGvoaHhQ5oyWHoXrvhb+1g==", + "requested": "[8.0.11, )", + "resolved": "8.0.11", + "contentHash": "+SVpb+dITG0G7X76+VfMHX92MA0Xp4xCk+LxFjc6jJcllGzOF1B4bqyzRVw809qTIdMPuO1KmGOciwQ4ziimUQ==", "dependencies": { - "Microsoft.EntityFrameworkCore.Relational": "8.0.6", - "Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.6", - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.6" + "Microsoft.EntityFrameworkCore.Relational": "8.0.11", + "Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.11", + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.11" } }, "Microsoft.Identity.Web": { @@ -198,17 +194,12 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.44.1", - "contentHash": "YyznXLQZCregzHvioip07/BkzjuWNXogJEVz9T5W6TwjNr17ax41YGzYMptlo2G10oLCuVPoyva62y0SIRDixg==", + "resolved": "1.49.0", + "contentHash": "wmY5VEEVTBJN+8KVB6qSVZYDCMpHs1UXooOijx/NH7OsMtK92NlxhPBpPyh4cR+07R/zyDGvA5+Fss4TpwlO+g==", "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "6.0.0", - "System.ClientModel": "1.1.0", - "System.Diagnostics.DiagnosticSource": "6.0.1", - "System.Memory.Data": "6.0.0", - "System.Numerics.Vectors": "4.5.0", - "System.Text.Encodings.Web": "6.0.0", - "System.Text.Json": "6.0.10", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.ClientModel": "1.7.0", + "System.Memory.Data": "8.0.1" } }, "Azure.Security.KeyVault.Certificates": { @@ -328,8 +319,8 @@ }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg==" + "resolved": "8.0.0", + "contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==" }, "Microsoft.Bcl.Memory": { "type": "Transitive", @@ -512,29 +503,28 @@ }, "Microsoft.Extensions.Diagnostics.Abstractions": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "resolved": "8.0.1", + "contentHash": "elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "System.Diagnostics.DiagnosticSource": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" } }, "Microsoft.Extensions.Diagnostics.HealthChecks": { "type": "Transitive", - "resolved": "8.0.6", - "contentHash": "Wtylr3ucMUQ+/6x5ngRtBQ0D0TVloWE3hbwUEhwE16OZHB66uqAEVnEvcAXxW2IFuVAuEHMXX5GebfkbSZQSTw==", + "resolved": "8.0.11", + "contentHash": "zLgN22Zp9pk8RHlwssRTexw4+a6wqOnKWN+VejdPn5Yhjql4XiBhkFo35Nu8mmqHIk/UEmmCnMGLWq75aFfkOw==", "dependencies": { - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.6", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.11", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", "Microsoft.Extensions.Options": "8.0.2" } }, "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { "type": "Transitive", - "resolved": "8.0.6", - "contentHash": "GiHK4B5Xsf5YzL73kup2zJoJfDx5RJYBd0LZN6dx8XyOSoZnh7NNrMP+vTLxAJVp//JxHk0KIhBnW9YuFrSVig==" + "resolved": "8.0.11", + "contentHash": "So3JUdRxozRjvQ3cxU6F3nI/i4emDnjane6yMYcJhvTTTu29ltlIdoXjkFGRceIWz8yKvuEpzXItZ0x5GvN2nQ==" }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", @@ -546,14 +536,14 @@ }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", + "resolved": "8.0.1", + "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", "dependencies": { "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" } }, "Microsoft.Extensions.Logging": { @@ -568,8 +558,8 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "resolved": "8.0.3", + "contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" } @@ -622,8 +612,8 @@ }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.70.0", - "contentHash": "ojVzpYG+qUV0H1RWWq7VQ9BJFWD8iaIoblApa5shGqCOo3fqGU5tv6xOIISkHf9y6uIJVSM+p7Dw+n0avrj+xA==", + "resolved": "4.76.0", + "contentHash": "j2FtmljuCveDJ7umBVYm6Bx3iVGA71U07Dc7byGr2Hrj7XlByZSknruCBUeYN3V75nn1VEhXegxE0MerxvxrXQ==", "dependencies": { "Microsoft.IdentityModel.Abstractions": "6.35.0", "System.Diagnostics.DiagnosticSource": "6.0.1" @@ -631,10 +621,10 @@ }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "PWnJcznrSGr25MN8ajlc2XIDW4zCFu0U6FkpaNLEWLgd1NgFCp5uDY3mqLDgM8zCN8hqj8yo5wHYfLB2HjcdGw==", + "resolved": "4.76.0", + "contentHash": "D0n3yMTa3gnDh1usrJmyxGWKYeqbQNCWLgQ0Tswf7S6nk9YobiCOX+M2V8EX5SPqkZxpwkTT6odAhaafu3TIeA==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.76.0", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -929,9 +919,10 @@ }, "StackExchange.Redis": { "type": "Transitive", - "resolved": "2.6.122", - "contentHash": "wp7mvGpFXaevfZ07/SDeh/6YHUJEgwJIGyjbDWKBYbPwKMJQYFz9zFEmBptqtVzqvSgft5nlewwutoaMaG0LPA==", + "resolved": "2.7.27", + "contentHash": "Uqc2OQHglqj9/FfGQ6RkKFkZfHySfZlfmbCl+hc+u2I/IqunfelQ7QJi7ZhvAJxUtu80pildVX6NPLdDaUffOw==", "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", "Pipelines.Sockets.Unofficial": "2.2.8" } }, @@ -958,11 +949,11 @@ }, "System.ClientModel": { "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "UocOlCkxLZrG2CKMAAImPcldJTxeesHnHGHwhJ0pNlZEvEXcWKuQvVOER2/NiOkJGRJk978SNdw3j6/7O9H1lg==", + "resolved": "1.7.0", + "contentHash": "NKKA3/O6B7PxmtIzOifExHdfoWthy3AD4EZ1JfzcZU8yGZTbYrK1qvXsHUL/1yQKKqWSKgIR1Ih/yf2gOaHc4w==", "dependencies": { - "System.Memory.Data": "1.0.2", - "System.Text.Json": "6.0.9" + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "System.Memory.Data": "8.0.1" } }, "System.CodeDom": { @@ -1057,16 +1048,8 @@ }, "System.Memory.Data": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "ntFHArH3I4Lpjf5m4DCXQHJuGwWPNVJPaAvM95Jy/u+2Yzt2ryiyIN04LAogkjP9DeRcEOiviAjQotfmPq/FrQ==", - "dependencies": { - "System.Text.Json": "6.0.0" - } - }, - "System.Numerics.Vectors": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" + "resolved": "8.0.1", + "contentHash": "BVYuec3jV23EMRDeR7Dr1/qhx7369dZzJ9IWy2xylvb4YfXsrUxspWc4UWYid/tj4zZK58uGZqn2WQiaDMhmAg==" }, "System.Reflection.Metadata": { "type": "Transitive", @@ -1091,8 +1074,8 @@ }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==" + "resolved": "4.5.0", + "contentHash": "wLBKzFnDCxP12VL9ANydSYhk59fC4cvOr9ypYQLPnAj48NQIhqnjdD2yhP8yEKyBJEjERWS9DisKL7rX5eU25Q==" }, "System.Security.Cryptography.Xml": { "type": "Transitive", @@ -1110,14 +1093,6 @@ "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, "System.Text.Json": { "type": "Transitive", "resolved": "8.0.5", diff --git a/tests/App2.Tests.Integration/App2.Tests.Integration.csproj b/tests/App2.Tests.Integration/App2.Tests.Integration.csproj index af4f0b0..f34413d 100644 --- a/tests/App2.Tests.Integration/App2.Tests.Integration.csproj +++ b/tests/App2.Tests.Integration/App2.Tests.Integration.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/tests/App2.Tests.Integration/packages.lock.json b/tests/App2.Tests.Integration/packages.lock.json index 242e821..232e59e 100644 --- a/tests/App2.Tests.Integration/packages.lock.json +++ b/tests/App2.Tests.Integration/packages.lock.json @@ -21,22 +21,22 @@ }, "Microsoft.AspNetCore.Mvc.Testing": { "type": "Direct", - "requested": "[8.0.8, )", - "resolved": "8.0.8", - "contentHash": "iYJ0tw9dOMNVJ/8VbtTYvS4INGelLShllPzO/jA/UIcKZmjz7Mum43Os3/gDaXdcSHt/d1LlvE4vh8zYwQ+UiQ==", + "requested": "[8.0.11, )", + "resolved": "8.0.11", + "contentHash": "9Zz7qomkPGQ1wZMRH5XNqntnfGd7dhzO3FiqBblIMZrW4j6o4P5ObGllCUvGOvzqZkuCjUisDiAxVzZr18mT4w==", "dependencies": { - "Microsoft.AspNetCore.TestHost": "8.0.8", - "Microsoft.Extensions.DependencyModel": "8.0.1", - "Microsoft.Extensions.Hosting": "8.0.0" + "Microsoft.AspNetCore.TestHost": "8.0.11", + "Microsoft.Extensions.DependencyModel": "8.0.2", + "Microsoft.Extensions.Hosting": "8.0.1" } }, "Microsoft.Data.Sqlite": { "type": "Direct", - "requested": "[8.0.4, )", - "resolved": "8.0.4", - "contentHash": "vgLm03wS+CfsolO7qk4KVuvt0CtzgdjKmoORuwxMmiIF1ow1JlOo1vwfDHfwXnGa5+QEbvOUy3169bBcHshfTg==", + "requested": "[8.0.11, )", + "resolved": "8.0.11", + "contentHash": "6JocV6S1akKlXaDVpRmmwc9d/M7wXBmiEZ7RxB5lxDk+er9Xi3P+yVYVnh+6IJ+Y6v8pecGWhGwcgH1mONcLuw==", "dependencies": { - "Microsoft.Data.Sqlite.Core": "8.0.4", + "Microsoft.Data.Sqlite.Core": "8.0.11", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.6" } }, @@ -97,16 +97,12 @@ }, "Azure.Identity": { "type": "Transitive", - "resolved": "1.11.4", - "contentHash": "Sf4BoE6Q3jTgFkgBkx7qztYOFELBCo+wQgpYDwal/qJ1unBH73ywPztIJKXBXORRzAeNijsuxhk94h0TIMvfYg==", + "resolved": "1.17.0", + "contentHash": "QZiMa1O5lTniWTSDPyPVdBKOS0/M5DWXTfQ2xLOot96yp8Q5A69iScGtzCIxfbg/4bmp/TynibZ2VK1v3qsSNA==", "dependencies": { - "Azure.Core": "1.38.0", - "Microsoft.Identity.Client": "4.61.3", - "Microsoft.Identity.Client.Extensions.Msal": "4.61.3", - "System.Memory": "4.5.4", - "System.Security.Cryptography.ProtectedData": "4.7.0", - "System.Text.Json": "4.7.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Azure.Core": "1.49.0", + "Microsoft.Identity.Client": "4.76.0", + "Microsoft.Identity.Client.Extensions.Msal": "4.76.0" } }, "Azure.Security.KeyVault.Certificates": { @@ -239,18 +235,18 @@ }, "Microsoft.AspNetCore.OutputCaching.StackExchangeRedis": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "gl+MEv02izgJSN+ADLzLeAfIehXRdhwEUK6E4BhEnf7CFw3TwsebAcbbB5W/HbgvEMBwR7WrTwiVprm+eLkFeg==", + "resolved": "8.0.16", + "contentHash": "iDfZhkKtmNXtvGCsm0DzSp5bJXj9wNqiLniNjAmguf7/uXdWDNd0WCKbOQmioH4eUkW8Jr/Vuj0fCPRDNlIzJA==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "StackExchange.Redis": "2.6.122" + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "Microsoft.Extensions.Options": "8.0.2", + "StackExchange.Redis": "2.7.27" } }, "Microsoft.AspNetCore.TestHost": { "type": "Transitive", - "resolved": "8.0.8", - "contentHash": "mQSMZMA72IK/N79HgLn7tCCkN+stEq6yhq0vr6xfw2wvcfjAV2R6JFUYGUDHmWVUxTjDWjQX+Yrd5S9vQKnPLA==", + "resolved": "8.0.11", + "contentHash": "A+Thv9ygVYbHV7yRwgT431An4UmW7F0Sv6GfZRMF+4W7WH8GIXeEnidasT+Q+0tT+rwAkNka020HdsTZzfxdYA==", "dependencies": { "System.IO.Pipelines": "8.0.0" } @@ -371,8 +367,8 @@ }, "Microsoft.Extensions.Configuration.Binder": { "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "2UKFJnLiBt7Od6nCnTqP9rTIUNhzmn9Hv1l2FchyKbz8xieB9ULwZTbQZMw+M24Qw3F5dzzH1U9PPleN0LNLOQ==", + "resolved": "8.0.2", + "contentHash": "7IQhGK+wjyGrNsPBjJcZwWAr+Wf6D4+TwOptUt77bWtgNkiV8tDEbhFS+dDamtQFZ2X7kWG9m71iZQRj2x3zgQ==", "dependencies": { "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" } @@ -397,8 +393,8 @@ }, "Microsoft.Extensions.Configuration.FileExtensions": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==", + "resolved": "8.0.1", + "contentHash": "EJzSNO9oaAXnTdtdNO6npPRsIIeZCBSNmdQ091VDO7fBiOtJAAeEq6dtrVXIi3ZyjC5XRSAtVvF8SzcneRHqKQ==", "dependencies": { "Microsoft.Extensions.Configuration": "8.0.0", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", @@ -409,23 +405,22 @@ }, "Microsoft.Extensions.Configuration.Json": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==", + "resolved": "8.0.1", + "contentHash": "L89DLNuimOghjV3tLx0ArFDwVEJD6+uGB3BMCMX01kaLzXkaXHb2021xOMl2QOxUxbdePKUZsUY7n2UUkycjRg==", "dependencies": { "Microsoft.Extensions.Configuration": "8.0.0", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "System.Text.Json": "8.0.0" + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Configuration.UserSecrets": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ihDHu2dJYQird9pl2CbdwuNDfvCZdOS0S7SPlNfhPt0B81UTT+yyZKz2pimFZGUp3AfuBRnqUCxB2SjsZKHVUw==", + "resolved": "8.0.1", + "contentHash": "7tYqdPPpAK+3jO9d5LTuCK2VxrEdf85Ol4trUr6ds4jclBecadWZ/RyPCbNjfbN5iGTfUnD/h65TOQuqQv2c+A==", "dependencies": { "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.1", "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", "Microsoft.Extensions.FileProviders.Physical": "8.0.0" } @@ -450,48 +445,47 @@ }, "Microsoft.Extensions.Diagnostics": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==", + "resolved": "8.0.1", + "contentHash": "doVPCUUCY7c6LhBsEfiy3W1bvS7Mi6LkfQMS8nlC22jZWNxBv8VO8bdfeyvpYFst6Kxqk7HBC6lytmEoBssvSQ==", "dependencies": { "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" } }, "Microsoft.Extensions.Diagnostics.Abstractions": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "resolved": "8.0.1", + "contentHash": "elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "System.Diagnostics.DiagnosticSource": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" } }, "Microsoft.Extensions.Diagnostics.HealthChecks": { "type": "Transitive", - "resolved": "8.0.6", - "contentHash": "Wtylr3ucMUQ+/6x5ngRtBQ0D0TVloWE3hbwUEhwE16OZHB66uqAEVnEvcAXxW2IFuVAuEHMXX5GebfkbSZQSTw==", + "resolved": "8.0.11", + "contentHash": "zLgN22Zp9pk8RHlwssRTexw4+a6wqOnKWN+VejdPn5Yhjql4XiBhkFo35Nu8mmqHIk/UEmmCnMGLWq75aFfkOw==", "dependencies": { - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.6", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.1", + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.11", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", "Microsoft.Extensions.Options": "8.0.2" } }, "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": { "type": "Transitive", - "resolved": "8.0.6", - "contentHash": "GiHK4B5Xsf5YzL73kup2zJoJfDx5RJYBd0LZN6dx8XyOSoZnh7NNrMP+vTLxAJVp//JxHk0KIhBnW9YuFrSVig==" + "resolved": "8.0.11", + "contentHash": "So3JUdRxozRjvQ3cxU6F3nI/i4emDnjane6yMYcJhvTTTu29ltlIdoXjkFGRceIWz8yKvuEpzXItZ0x5GvN2nQ==" }, "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore": { "type": "Transitive", - "resolved": "8.0.6", - "contentHash": "paBCLbj7dMnPSlZ+dkD/Q8KNmI/UZbnCrBVMbX/GZ/6Cs787GSrWawX1UtiCDPfsVGvoaHhQ5oyWHoXrvhb+1g==", + "resolved": "8.0.11", + "contentHash": "+SVpb+dITG0G7X76+VfMHX92MA0Xp4xCk+LxFjc6jJcllGzOF1B4bqyzRVw809qTIdMPuO1KmGOciwQ4ziimUQ==", "dependencies": { - "Microsoft.EntityFrameworkCore.Relational": "8.0.6", - "Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.6", - "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.6" + "Microsoft.EntityFrameworkCore.Relational": "8.0.11", + "Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.11", + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.11" } }, "Microsoft.Extensions.FileProviders.Abstractions": { @@ -519,43 +513,43 @@ }, "Microsoft.Extensions.Hosting": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ItYHpdqVp5/oFLT5QqbopnkKlyFG9EW/9nhM6/yfObeKt6Su0wkBio6AizgRHGNwhJuAtlE5VIjow5JOTrip6w==", + "resolved": "8.0.1", + "contentHash": "bP9EEkHBEfjgYiG8nUaXqMk/ujwJrffOkNPP7onpRMO8R+OUSESSP4xHkCAXgYZ1COP2Q9lXlU5gkMFh20gRuw==", "dependencies": { "Microsoft.Extensions.Configuration": "8.0.0", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.2", "Microsoft.Extensions.Configuration.CommandLine": "8.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", - "Microsoft.Extensions.Configuration.Json": "8.0.0", - "Microsoft.Extensions.Configuration.UserSecrets": "8.0.0", - "Microsoft.Extensions.DependencyInjection": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Diagnostics": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", + "Microsoft.Extensions.Configuration.Json": "8.0.1", + "Microsoft.Extensions.Configuration.UserSecrets": "8.0.1", + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Diagnostics": "8.0.1", "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", "Microsoft.Extensions.FileProviders.Physical": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.0", - "Microsoft.Extensions.Logging.Console": "8.0.0", - "Microsoft.Extensions.Logging.Debug": "8.0.0", - "Microsoft.Extensions.Logging.EventLog": "8.0.0", - "Microsoft.Extensions.Logging.EventSource": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0" + "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Configuration": "8.0.1", + "Microsoft.Extensions.Logging.Console": "8.0.1", + "Microsoft.Extensions.Logging.Debug": "8.0.1", + "Microsoft.Extensions.Logging.EventLog": "8.0.1", + "Microsoft.Extensions.Logging.EventSource": "8.0.1", + "Microsoft.Extensions.Options": "8.0.2" } }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", + "resolved": "8.0.1", + "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", "dependencies": { "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" } }, "Microsoft.Extensions.Logging": { @@ -578,65 +572,63 @@ }, "Microsoft.Extensions.Logging.Configuration": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ixXXV0G/12g6MXK65TLngYN9V5hQQRuV+fZi882WIoVJT7h5JvoYoxTEwCgdqwLjSneqh1O+66gM8sMr9z/rsQ==", + "resolved": "8.0.1", + "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", "dependencies": { "Microsoft.Extensions.Configuration": "8.0.0", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.2", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" } }, "Microsoft.Extensions.Logging.Console": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "e+48o7DztoYog+PY430lPxrM4mm3PbA6qucvQtUDDwVo4MO+ejMw7YGc/o2rnxbxj4isPxdfKFzTxvXMwAz83A==", + "resolved": "8.0.1", + "contentHash": "uzcg/5U2eLyn5LIKlERkdSxw6VPC1yydnOSQiRRWGBGN3kphq3iL4emORzrojScDmxRhv49gp5BI8U3Dz7y4iA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "System.Text.Json": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Configuration": "8.0.1", + "Microsoft.Extensions.Options": "8.0.2" } }, "Microsoft.Extensions.Logging.Debug": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "dt0x21qBdudHLW/bjMJpkixv858RRr8eSomgVbU8qljOyfrfDGi1JQvpF9w8S7ziRPtRKisuWaOwFxJM82GxeA==", + "resolved": "8.0.1", + "contentHash": "B8hqNuYudC2RB+L/DI33uO4rf5by41fZVdcVL2oZj0UyoAZqnwTwYHp1KafoH4nkl1/23piNeybFFASaV2HkFg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" } }, "Microsoft.Extensions.Logging.EventLog": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3X9D3sl7EmOu7vQp5MJrmIJBl5XSdOhZPYXUeFfYa6Nnm9+tok8x3t3IVPLhm7UJtPOU61ohFchw8rNm9tIYOQ==", + "resolved": "8.0.1", + "contentHash": "ZD1m4GXoxcZeDJIq8qePKj+QAWeQNO/OG8skvrOG8RQfxLp9MAKRoliTc27xanoNUzeqvX5HhS/I7c0BvwAYUg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "System.Diagnostics.EventLog": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "System.Diagnostics.EventLog": "8.0.1" } }, "Microsoft.Extensions.Logging.EventSource": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "oKcPMrw+luz2DUAKhwFXrmFikZWnyc8l2RKoQwqU3KIZZjcfoJE0zRHAnqATfhRZhtcbjl/QkiY2Xjxp0xu+6w==", + "resolved": "8.0.1", + "contentHash": "YMXMAla6B6sEf/SnfZYTty633Ool3AH7KOw2LOaaEqwSo2piK4f7HMtzyc3CNiipDnq1fsUSuG5Oc7ZzpVy8WQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0", - "System.Text.Json": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" } }, "Microsoft.Extensions.Options": { @@ -672,8 +664,8 @@ }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.70.0", - "contentHash": "ojVzpYG+qUV0H1RWWq7VQ9BJFWD8iaIoblApa5shGqCOo3fqGU5tv6xOIISkHf9y6uIJVSM+p7Dw+n0avrj+xA==", + "resolved": "4.76.0", + "contentHash": "j2FtmljuCveDJ7umBVYm6Bx3iVGA71U07Dc7byGr2Hrj7XlByZSknruCBUeYN3V75nn1VEhXegxE0MerxvxrXQ==", "dependencies": { "Microsoft.IdentityModel.Abstractions": "6.35.0", "System.Diagnostics.DiagnosticSource": "6.0.1" @@ -681,10 +673,10 @@ }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "PWnJcznrSGr25MN8ajlc2XIDW4zCFu0U6FkpaNLEWLgd1NgFCp5uDY3mqLDgM8zCN8hqj8yo5wHYfLB2HjcdGw==", + "resolved": "4.76.0", + "contentHash": "D0n3yMTa3gnDh1usrJmyxGWKYeqbQNCWLgQ0Tswf7S6nk9YobiCOX+M2V8EX5SPqkZxpwkTT6odAhaafu3TIeA==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.76.0", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -1080,9 +1072,10 @@ }, "StackExchange.Redis": { "type": "Transitive", - "resolved": "2.6.122", - "contentHash": "wp7mvGpFXaevfZ07/SDeh/6YHUJEgwJIGyjbDWKBYbPwKMJQYFz9zFEmBptqtVzqvSgft5nlewwutoaMaG0LPA==", + "resolved": "2.7.27", + "contentHash": "Uqc2OQHglqj9/FfGQ6RkKFkZfHySfZlfmbCl+hc+u2I/IqunfelQ7QJi7ZhvAJxUtu80pildVX6NPLdDaUffOw==", "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", "Pipelines.Sockets.Unofficial": "2.2.8" } }, @@ -1134,8 +1127,8 @@ }, "System.Diagnostics.EventLog": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==" + "resolved": "8.0.1", + "contentHash": "n1ZP7NM2Gkn/MgD8+eOT5MulMj6wfeQMNS2Pizvq5GHCZfjlFMXV2irQlQmJhwA2VABC57M0auudO89Iu2uRLg==" }, "System.Formats.Asn1": { "type": "Transitive", @@ -1181,8 +1174,8 @@ }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==" + "resolved": "4.5.0", + "contentHash": "wLBKzFnDCxP12VL9ANydSYhk59fC4cvOr9ypYQLPnAj48NQIhqnjdD2yhP8yEKyBJEjERWS9DisKL7rX5eU25Q==" }, "System.Security.Cryptography.Xml": { "type": "Transitive", @@ -1249,11 +1242,11 @@ "App2.Domain": "[1.0.0, )", "App2.Infrastructure": "[1.0.0, )", "Azure.Extensions.AspNetCore.Configuration.Secrets": "[1.4.0, )", - "Azure.Identity": "[1.11.4, )", + "Azure.Identity": "[1.17.0, )", "FluentValidation.DependencyInjectionExtensions": "[11.9.0, )", "MediatR.Extensions.Microsoft.DependencyInjection": "[11.1.0, )", - "Microsoft.AspNetCore.OutputCaching.StackExchangeRedis": "[8.0.0, )", - "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore": "[8.0.6, )", + "Microsoft.AspNetCore.OutputCaching.StackExchangeRedis": "[8.0.16, )", + "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore": "[8.0.11, )", "Microsoft.Identity.Web": "[3.8.2, )", "NetEscapades.AspNetCore.SecurityHeaders": "[0.21.0, )", "OpenTelemetry.Exporter.OpenTelemetryProtocol": "[1.9.0, )", diff --git a/tests/App2.Tests.Unit/App2.Tests.Unit.csproj b/tests/App2.Tests.Unit/App2.Tests.Unit.csproj index 8ab5a53..56001ba 100644 --- a/tests/App2.Tests.Unit/App2.Tests.Unit.csproj +++ b/tests/App2.Tests.Unit/App2.Tests.Unit.csproj @@ -7,7 +7,7 @@ - +