Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 35 additions & 35 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@
</PropertyGroup>
<ItemGroup>
<!-- Aspire -->
<PackageVersion Include="Aspire.MongoDB.Driver" Version="13.2.1" />
<PackageVersion Include="Aspire.StackExchange.Redis" Version="13.2.1" />
<PackageVersion Include="Aspire.Hosting.Testing" Version="13.1.2" />
<PackageVersion Include="Aspire.MongoDB.Driver" Version="13.2.4" />
<PackageVersion Include="Aspire.StackExchange.Redis" Version="13.2.4" />
<PackageVersion Include="Aspire.Hosting.Testing" Version="13.2.4" />
<!-- MongoDB -->
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.5" />
<PackageVersion Include="MongoDB.Bson" Version="3.7.0" />
<PackageVersion Include="MongoDB.Driver" Version="3.7.0" />
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.7" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.7" />
<PackageVersion Include="MongoDB.Bson" Version="3.8.0" />
<PackageVersion Include="MongoDB.Driver" Version="3.8.0" />
<PackageVersion Include="MongoDB.EntityFrameworkCore" Version="10.0.1" />
<!-- Azure Storage -->
<PackageVersion Include="Azure.Storage.Blobs" Version="12.25.0" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.20.0" />
<!-- Azure Key Vault -->
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.5.0" />
<PackageVersion Include="Azure.Identity" Version="1.19.0" />
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.5.1" />
<PackageVersion Include="Azure.Identity" Version="1.21.0" />
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.12" />
<!-- MediatR -->
<PackageVersion Include="MediatR" Version="14.1.0" />
Expand All @@ -27,43 +27,43 @@
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="12.1.1" />
<PackageVersion Include="FluentValidation.TestHelper" Version="11.11.0" />
<!-- Authentication -->
<PackageVersion Include="Auth0.AspNetCore.Authentication" Version="1.6.1" />
<PackageVersion Include="Auth0.ManagementApi" Version="7.46.0" />
<PackageVersion Include="Auth0.AspNetCore.Authentication" Version="1.7.0" />
<PackageVersion Include="Auth0.ManagementApi" Version="8.2.0" />
<!-- Email -->
<PackageVersion Include="SendGrid" Version="9.29.3" />
<!-- Microsoft Extensions -->
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.5" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.7" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.7" />
<!-- Testing -->
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
<PackageVersion Include="FluentAssertions" Version="8.8.0" />
<PackageVersion Include="FluentAssertions" Version="8.9.0" />
<PackageVersion Include="NSubstitute" Version="5.3.0" />
<PackageVersion Include="bUnit" Version="2.6.2" />
<PackageVersion Include="bUnit" Version="2.7.2" />
<PackageVersion Include="NetArchTest.Rules" Version="1.3.2" />
<PackageVersion Include="coverlet.collector" Version="8.0.0" />
<PackageVersion Include="Microsoft.Playwright" Version="1.49.0" />
<PackageVersion Include="coverlet.collector" Version="10.0.0" />
<PackageVersion Include="Microsoft.Playwright" Version="1.59.0" />
<PackageVersion Include="Testcontainers.MongoDb" Version="4.11.0" />
<PackageVersion Include="Testcontainers.Azurite" Version="4.11.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.7" />
<!-- Aspire ServiceDefaults Dependencies -->
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.4.0" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.4.0" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.0" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.15.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.0" />
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.5.0" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.5.0" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.15.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.1" />
<PackageVersion Include="Azure.Monitor.OpenTelemetry.AspNetCore" Version="1.4.0" />
<!-- Health Checks -->
<PackageVersion Include="AspNetCore.HealthChecks.MongoDb" Version="9.0.0" />
<PackageVersion Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" />
</ItemGroup>
</Project>
</Project>
11 changes: 9 additions & 2 deletions src/AppHost/AppHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,20 @@
var auth0MgmtClientId = builder.AddParameter("auth0MgmtClientId", secret: true);
var auth0MgmtClientSecret = builder.AddParameter("auth0MgmtClientSecret", secret: true);

var isTesting = string.Equals(builder.Environment.EnvironmentName, "Testing", StringComparison.OrdinalIgnoreCase)
|| string.Equals(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"), "Testing", StringComparison.OrdinalIgnoreCase);

// Add Web project with service discovery and health checks
builder.AddProject<Projects.Web>("web")
var web = builder.AddProject<Projects.Web>("web")
.WithReference(mongodb)
.WithReference(redis)
.WaitFor(redis)
.WithHttpHealthCheck("/health")
.WithEnvironment("Auth0Management__ClientId", auth0MgmtClientId)
.WithEnvironment("Auth0Management__ClientSecret", auth0MgmtClientSecret);

if (!isTesting)
{
web.WithHttpHealthCheck("/health");
}

builder.Build().Run();
22 changes: 22 additions & 0 deletions src/Web/Features/Admin/Users/UserManagementExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@
// Project Name : Web
// =============================================

using Auth0.ManagementApi;

using Domain.Features.Admin.Abstractions;

using Microsoft.Extensions.Options;

namespace Web.Features.Admin.Users;

/// <summary>
Expand All @@ -33,6 +37,24 @@ public static IServiceCollection AddUserManagement(
services.Configure<Auth0ManagementOptions>(
configuration.GetSection(Auth0ManagementOptions.SectionName));

// Register the Auth0 management client as a singleton; the SDK's
// ClientCredentialsTokenProvider handles M2M token acquisition and caching internally.
services.AddSingleton<IManagementApiClient>(sp =>
{
var opts = sp.GetRequiredService<IOptions<Auth0ManagementOptions>>().Value;
var audience = string.IsNullOrWhiteSpace(opts.Audience) ? null : opts.Audience;

return new ManagementClient(new ManagementClientOptions
{
Domain = opts.Domain,
TokenProvider = new ClientCredentialsTokenProvider(
opts.Domain,
opts.ClientId,
opts.ClientSecret,
audience: audience)
});
});

// Register the service as scoped — a new instance per HTTP request.
services.AddScoped<IUserManagementService, UserManagementService>();

Expand Down
Loading
Loading