-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathProgram.cs
More file actions
114 lines (91 loc) · 4.09 KB
/
Copy pathProgram.cs
File metadata and controls
114 lines (91 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using Azure.Identity;
using Azure.Monitor.OpenTelemetry.AspNetCore;
using Dfe.SignIn.Base.Framework;
using Dfe.SignIn.Core.Contracts.Audit;
using Dfe.SignIn.Core.Interfaces.Audit;
using Dfe.SignIn.Core.UseCases.SelectOrganisation;
using Dfe.SignIn.Gateways.DistributedCache;
using Dfe.SignIn.Gateways.DistributedCache.SelectOrganisation;
using Dfe.SignIn.Gateways.ServiceBus;
using Dfe.SignIn.InternalApi.Client;
using Dfe.SignIn.NodeApi.Client;
using Dfe.SignIn.PublicApi.Authorization;
using Dfe.SignIn.PublicApi.Configuration;
using Dfe.SignIn.PublicApi.Endpoints.SelectOrganisation;
using Dfe.SignIn.PublicApi.Endpoints.Users;
using Dfe.SignIn.WebFramework.Configuration;
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults(["/v2/healthcheck"]);
if (builder.Environment.IsEnvironment("Local")) {
builder.Configuration.AddUserSecrets<Program>();
}
builder.Configuration.AddEnvironmentVariables();
builder.WebHost.ConfigureKestrel((context, options) => {
options.AddServerHeader = false;
context.Configuration.GetSection("Kestrel").Bind(options);
});
// Add OpenTelemetry and configure it to use Azure Monitor.
if (builder.Configuration.GetSection("AzureMonitor").Exists()) {
builder.Services.AddOpenTelemetry().UseAzureMonitor();
}
IEnumerable<NodeApiName> requiredNodeApiNames = [
NodeApiName.Access, NodeApiName.Applications, NodeApiName.Organisations];
// Get token credential for making API requests to internal APIs.
var tokenCredential = TokenCredentialHelpers.CreateFromConfiguration(
builder.Configuration.GetRequiredSection("InternalApiClient")
);
// Add services to the container.
builder.Services
.Configure<PlatformOptions>(builder.Configuration.GetRequiredSection("Platform"))
.Configure<SecurityHeaderPolicyOptions>(builder.Configuration.GetSection("SecurityHeaderPolicy"))
.ConfigureDfeSignInJsonSerializerOptions();
builder.Services
.Configure<BearerTokenOptions>(builder.Configuration.GetRequiredSection("BearerToken"));
builder.Services
.Configure<AuditOptions>(builder.Configuration.GetRequiredSection("Audit"))
.SetupAuditContext();
builder.Services.SetupEndpoints();
builder.Services.SetupSwagger();
builder.Services.SetupScopedSession();
builder.Services.AddHealthChecks();
builder.Services
.AddInteractionFramework();
builder.Services
.Configure<InternalApiClientOptions>(builder.Configuration.GetRequiredSection("InternalApiClient"))
.SetupInternalApiClient(tokenCredential)
.SetupNodeApiClient(requiredNodeApiNames, builder.Configuration.GetRequiredSection("InternalApiClient"), tokenCredential)
.SetupResiliencePipelines(builder.Configuration);
builder.Services
.AddInteractionCaching(builder.Configuration);
var azureTokenCredentialOptions = new DefaultAzureCredentialOptions();
builder.Configuration.GetSection("Azure").Bind(azureTokenCredentialOptions);
var azureTokenCredential = new DefaultAzureCredential(azureTokenCredentialOptions);
builder.Services
.AddServiceBusIntegration(builder.Configuration, azureTokenCredential);
if (builder.Environment.IsEnvironment("Local")) {
builder.Services.AddNullInteractor<WriteToAuditRequest, WriteToAuditResponse>();
}
else {
builder.Services.AddAuditingWithServiceBus(builder.Configuration);
}
builder.Services
.SetupRedisCacheStore(DistributedCacheKeys.SelectOrganisationSessions,
builder.Configuration.GetRequiredSection("SelectOrganisationSessionRedisCache"))
.AddSelectOrganisationSessionCache()
.Configure<SelectOrganisationOptions>(builder.Configuration.GetRequiredSection("SelectOrganisation"))
.SetupSelectOrganisationInteractions();
builder.Services.SetupApiSecretEncryption(builder.Configuration);
builder.Services.SetupUserInteractions();
var app = builder.Build();
app.UseMiddleware<CancellationContextMiddleware>();
app.UseDsiSecurityHeaderPolicy();
app.UseSwagger();
app.UseSwaggerUI(options => {
options.SwaggerEndpoint("v1/swagger.json", "DfE Sign-in Public API");
});
app.UseHttpsRedirection();
app.UseHealthChecks();
app.UseBearerTokenAuthMiddleware();
app.UseSelectOrganisationEndpoints();
app.UseUserEndpoints();
await app.RunAsync();