From 98daa78e3c7cc07caf8670a2d31724ddc7eec127 Mon Sep 17 00:00:00 2001 From: John Rudd Date: Thu, 16 Jul 2026 11:32:10 +0100 Subject: [PATCH 1/3] Hooked up azure app configuration to aspire --- Directory.Packages.props | 5 +++-- src/Dfe.SignIn.AppHost/AppHost.cs | 22 +++++++++++++++++-- .../Dfe.SignIn.AppHost.csproj | 3 ++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 9f91492f..1476df1b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -21,7 +21,8 @@ - + + @@ -139,4 +140,4 @@ - + \ No newline at end of file diff --git a/src/Dfe.SignIn.AppHost/AppHost.cs b/src/Dfe.SignIn.AppHost/AppHost.cs index d898de9b..93a1a1fd 100644 --- a/src/Dfe.SignIn.AppHost/AppHost.cs +++ b/src/Dfe.SignIn.AppHost/AppHost.cs @@ -1,10 +1,21 @@ using System.Reflection; +using Azure.Identity; using Dfe.SignIn.AppHost; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration.AzureAppConfiguration; var builder = DistributedApplication.CreateBuilder(args); builder.Configuration.AddUserSecrets(Assembly.GetExecutingAssembly(), optional: true, reloadOnChange: true); +builder.Configuration.AddAzureAppConfiguration(options => { + options.Connect(builder.Configuration["ConnectionStrings:AppConfiguration"]) + .Select(KeyFilter.Any, "dev"); + + options.ConfigureKeyVault(kv => { + kv.SetCredential(new DefaultAzureCredential()); + }); +}); + #pragma warning disable ASPIRECERTIFICATES001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. var redis = builder.AddRedis("infra-redis") .WithPassword(null) @@ -41,6 +52,7 @@ var selectOrgConfig = builder.Configuration.GetSection("SelectOrganisation"); var internalApiConfig = builder.Configuration.GetSection("InternalApiClient"); var efConfig = builder.Configuration.GetSection("EntityFramework"); +var assets = builder.Configuration.GetSection("Assets"); var dotNetComponents = builder.Configuration.GetSection("Components:DotNet"); var nodeComponents = builder.Configuration.GetSection("Components:Node"); @@ -52,6 +64,8 @@ .WithEnvironment("GovNotify__ApiKey", govNotifyConfig["ApiKey"]) .WithEnvironment("RaiseSupportTicketByEmail__SupportEmailAddress", supportEmailConfig["SupportEmailAddress"]) .WithEnvironment("RaiseSupportTicketByEmail__EmailTemplateId", supportEmailConfig["EmailTemplateId"]) + .WithEnvironment("Assets__BaseAddress", assets["BaseAddress"]) + .WithEnvironment("Assets__FrontendVersion", assets["FrontendVersion"]) .WaitFor(frontend) .WaitFor(redis); } @@ -66,6 +80,7 @@ .WithEnvironment("EntityFramework__Organisations__Name", efConfig["Organisations:Name"]) .WithEnvironment("EntityFramework__Organisations__Username", efConfig["Organisations:Username"]) .WithEnvironment("EntityFramework__Organisations__Password", efConfig["Organisations:Password"]) + .WithEnvironment("PublicApiSecretEncryption__Key", publicApiSecretConfig["Key"]) .WithEnvironment("InternalApiClient__ClientId", internalApiConfig["ClientId"]) .WithEnvironment("InternalApiClient__ClientSecret", internalApiConfig["ClientSecret"]) .WithEnvironment("InternalApiClient__Tenant", internalApiConfig["Tenant"]) @@ -95,6 +110,8 @@ .WithEnvironment("ExternalId__TenantId", externalIdConfig["TenantId"]) .WithEnvironment("Session__DurationInMinutes", sessionConfig["DurationInMinutes"]) .WithEnvironment("Session__NotifyRemainingMinutes", sessionConfig["NotifyRemainingMinutes"]) + .WithEnvironment("Assets__BaseAddress", assets["BaseAddress"]) + .WithEnvironment("Assets__FrontendVersion", assets["FrontendVersion"]) .WaitFor(frontend) .WaitFor(redis); } @@ -154,6 +171,7 @@ .WaitForIfPresent(interactor); } -builder.AddExecutable("tool-tls-proxy", "pwsh", "../../", "-Command", "Start-DsiTlsProxy"); - +if (nodeComponents.GetValue("Run-TlsProxy", false)) { + builder.AddExecutable("tool-tls-proxy", "pwsh", "../../", "-Command", "Start-DsiTlsProxy"); +} await builder.Build().RunAsync(); diff --git a/src/Dfe.SignIn.AppHost/Dfe.SignIn.AppHost.csproj b/src/Dfe.SignIn.AppHost/Dfe.SignIn.AppHost.csproj index bc5fee37..426b3666 100644 --- a/src/Dfe.SignIn.AppHost/Dfe.SignIn.AppHost.csproj +++ b/src/Dfe.SignIn.AppHost/Dfe.SignIn.AppHost.csproj @@ -12,7 +12,8 @@ - + + From 9ab226834344eb55c5a5085a36997febb30606ca Mon Sep 17 00:00:00 2001 From: John Rudd Date: Thu, 16 Jul 2026 20:08:07 +0100 Subject: [PATCH 2/3] Forcing unit test to run --- src/Dfe.SignIn.Core.UseCases/CoreUseCasesAssembly.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Dfe.SignIn.Core.UseCases/CoreUseCasesAssembly.cs b/src/Dfe.SignIn.Core.UseCases/CoreUseCasesAssembly.cs index 0963f6a2..83e14457 100644 --- a/src/Dfe.SignIn.Core.UseCases/CoreUseCasesAssembly.cs +++ b/src/Dfe.SignIn.Core.UseCases/CoreUseCasesAssembly.cs @@ -1,6 +1,6 @@ namespace Dfe.SignIn.Core.UseCases; /// -/// An empty type representing the core use cases assembly. +/// An empty type representing the core use cases assembly.. /// public static class CoreUseCasesAssembly { } From d3730453d3f2c77975e919e1cc7e0e5c9c42bee5 Mon Sep 17 00:00:00 2001 From: John Rudd Date: Thu, 16 Jul 2026 20:12:24 +0100 Subject: [PATCH 3/3] Added ability to optionally opt into using Azure app configuration for aspire --- src/Dfe.SignIn.AppHost/AppHost.cs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Dfe.SignIn.AppHost/AppHost.cs b/src/Dfe.SignIn.AppHost/AppHost.cs index 93a1a1fd..6e081b2f 100644 --- a/src/Dfe.SignIn.AppHost/AppHost.cs +++ b/src/Dfe.SignIn.AppHost/AppHost.cs @@ -5,16 +5,23 @@ using Microsoft.Extensions.Configuration.AzureAppConfiguration; var builder = DistributedApplication.CreateBuilder(args); -builder.Configuration.AddUserSecrets(Assembly.GetExecutingAssembly(), optional: true, reloadOnChange: true); - -builder.Configuration.AddAzureAppConfiguration(options => { - options.Connect(builder.Configuration["ConnectionStrings:AppConfiguration"]) - .Select(KeyFilter.Any, "dev"); - options.ConfigureKeyVault(kv => { - kv.SetCredential(new DefaultAzureCredential()); +if (!string.IsNullOrEmpty(builder.Configuration.GetConnectionString("AppConfiguration"))) { + var appConfigurationTag = builder.Configuration["AppConfiguration:Tag"]; + if (string.IsNullOrEmpty(appConfigurationTag)) { + throw new ArgumentNullException("AppConfiguration Tag missing"); + } + builder.Configuration.AddAzureAppConfiguration(options => { + options.Connect(builder.Configuration["ConnectionStrings:AppConfiguration"]) + .Select(KeyFilter.Any, "dev"); + + options.ConfigureKeyVault(kv => { + kv.SetCredential(new DefaultAzureCredential()); + }); }); -}); +} + +builder.Configuration.AddUserSecrets(Assembly.GetExecutingAssembly(), optional: true, reloadOnChange: true); #pragma warning disable ASPIRECERTIFICATES001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. var redis = builder.AddRedis("infra-redis")