From 5342c86af0c4b10d1c80534c87cf3a9859df619d Mon Sep 17 00:00:00 2001 From: Reuben Bond Date: Thu, 4 May 2023 08:22:34 -0700 Subject: [PATCH] Remove Serilog from Identity.API and clean up --- .../Identity/Identity.API/GlobalUsings.cs | 3 +- .../Identity/Identity.API/Identity.API.csproj | 6 - src/Services/Identity/Identity.API/Program.cs | 86 ++++++------- .../Identity.API/ProgramExtensions.cs | 117 ------------------ 4 files changed, 44 insertions(+), 168 deletions(-) delete mode 100644 src/Services/Identity/Identity.API/ProgramExtensions.cs diff --git a/src/Services/Identity/Identity.API/GlobalUsings.cs b/src/Services/Identity/Identity.API/GlobalUsings.cs index bbbe458c9..a4ecca85f 100644 --- a/src/Services/Identity/Identity.API/GlobalUsings.cs +++ b/src/Services/Identity/Identity.API/GlobalUsings.cs @@ -1,4 +1,4 @@ -global using Azure.Core; +global using Azure.Core; global using Azure.Identity; global using HealthChecks.UI.Client; global using IdentityModel; @@ -41,7 +41,6 @@ global using System.Collections.Generic; global using System.ComponentModel.DataAnnotations; global using System.Data.SqlClient; global using System.IdentityModel.Tokens.Jwt; -global using System.IO; global using System.Linq; global using System.Security.Claims; global using System.Text.RegularExpressions; diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj index 58f550997..93bf5b3a5 100644 --- a/src/Services/Identity/Identity.API/Identity.API.csproj +++ b/src/Services/Identity/Identity.API/Identity.API.csproj @@ -37,12 +37,6 @@ - - - - - - diff --git a/src/Services/Identity/Identity.API/Program.cs b/src/Services/Identity/Identity.API/Program.cs index 2dafe5cbe..c0fa8fa7c 100644 --- a/src/Services/Identity/Identity.API/Program.cs +++ b/src/Services/Identity/Identity.API/Program.cs @@ -1,5 +1,4 @@ -var appName = "Identity.API"; -var builder = WebApplication.CreateBuilder(); +var builder = WebApplication.CreateBuilder(args); if (builder.Configuration.GetValue("UseVault", false)) { @@ -10,21 +9,43 @@ if (builder.Configuration.GetValue("UseVault", false)) builder.Configuration.AddAzureKeyVault(new Uri($"https://{builder.Configuration["Vault:Name"]}.vault.azure.net/"), credential); } -builder.AddCustomConfiguration(); -builder.AddCustomSerilog(); -builder.AddCustomMvc(); -builder.AddCustomDatabase(); -builder.AddCustomIdentity(); -builder.AddCustomIdentityServer(); -builder.AddCustomAuthentication(); -builder.AddCustomHealthChecks(); -builder.AddCustomApplicationServices(); +builder.Services.AddControllersWithViews(); +builder.Services.AddControllers(); +builder.Services.AddRazorPages(); -var app = builder.Build(); -if (app.Environment.IsDevelopment()) +builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString("IdentityDb"))); +builder.Services.AddIdentity() + .AddEntityFrameworkStores() + .AddDefaultTokenProviders(); + +builder.Services.AddIdentityServer(options => { - app.UseDeveloperExceptionPage(); -} + options.IssuerUri = "null"; + options.Authentication.CookieLifetime = TimeSpan.FromHours(2); + + options.Events.RaiseErrorEvents = true; + options.Events.RaiseInformationEvents = true; + options.Events.RaiseFailureEvents = true; + options.Events.RaiseSuccessEvents = true; +}) +.AddInMemoryIdentityResources(Config.GetResources()) +.AddInMemoryApiScopes(Config.GetApiScopes()) +.AddInMemoryApiResources(Config.GetApis()) +.AddInMemoryClients(Config.GetClients(builder.Configuration)) +.AddAspNetIdentity() +.AddDeveloperSigningCredential(); // Not recommended for production - you need to store your key material somewhere secure + +builder.Services.AddAuthentication(); +builder.Services.AddHealthChecks() + .AddCheck("self", () => HealthCheckResult.Healthy()) + .AddSqlServer(builder.Configuration.GetConnectionString("IdentityDb"), + name: "IdentityDB-check", + tags: new string[] { "IdentityDB" }); +builder.Services.AddTransient(); +builder.Services.AddTransient, EFLoginService>(); +builder.Services.AddTransient(); + +var app = builder.Build(); var pathBase = builder.Configuration["PATH_BASE"]; if (!string.IsNullOrEmpty(pathBase)) @@ -35,16 +56,11 @@ app.UseStaticFiles(); // This cookie policy fixes login issues with Chrome 80+ using HHTP app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.Lax }); - app.UseRouting(); - app.UseIdentityServer(); - - app.UseAuthorization(); app.MapDefaultControllerRoute(); - app.MapHealthChecks("/hc", new HealthCheckOptions() { Predicate = _ => true, @@ -54,29 +70,13 @@ app.MapHealthChecks("/liveness", new HealthCheckOptions { Predicate = r => r.Name.Contains("self") }); -try -{ - app.Logger.LogInformation("Seeding database ({ApplicationName})...", appName); - - // Apply database migration automatically. Note that this approach is not - // recommended for production scenarios. Consider generating SQL scripts from - // migrations instead. - using (var scope = app.Services.CreateScope()) - { - await SeedData.EnsureSeedData(scope, app.Configuration, app.Logger); - } - app.Logger.LogInformation("Starting web host ({ApplicationName})...", appName); - app.Run(); - - return 0; -} -catch (Exception ex) +// Apply database migration automatically. Note that this approach is not +// recommended for production scenarios. Consider generating SQL scripts from +// migrations instead. +using (var scope = app.Services.CreateScope()) { - app.Logger.LogCritical(ex, "Host terminated unexpectedly ({ApplicationName})...", appName); - return 1; + await SeedData.EnsureSeedData(scope, app.Configuration, app.Logger); } -finally -{ - Serilog.Log.CloseAndFlush(); -} \ No newline at end of file + +await app.RunAsync(); diff --git a/src/Services/Identity/Identity.API/ProgramExtensions.cs b/src/Services/Identity/Identity.API/ProgramExtensions.cs deleted file mode 100644 index 19f5e71d2..000000000 --- a/src/Services/Identity/Identity.API/ProgramExtensions.cs +++ /dev/null @@ -1,117 +0,0 @@ -using Serilog; - -namespace Microsoft.eShopOnContainers.Services.Identity.API; - -public static class ProgramExtensions -{ - private const string AppName = "Identity API"; - - public static void AddCustomConfiguration(this WebApplicationBuilder builder) - { - builder.Configuration.AddConfiguration(GetConfiguration()).Build(); - - } - - public static void AddCustomSerilog(this WebApplicationBuilder builder) - { - var seqServerUrl = builder.Configuration["SeqServerUrl"]; - var logstashUrl = builder.Configuration["LogstashgUrl"]; - - Log.Logger = new LoggerConfiguration() - .MinimumLevel.Verbose() - .Enrich.WithProperty("ApplicationContext", AppName) - .Enrich.FromLogContext() - .WriteTo.Console() - .WriteTo.Seq(string.IsNullOrWhiteSpace(seqServerUrl) ? "http://seq" : seqServerUrl) - .WriteTo.Http(string.IsNullOrWhiteSpace(logstashUrl) ? "http://localhost:8080" : logstashUrl, null) - .ReadFrom.Configuration(builder.Configuration) - .CreateLogger(); - - builder.Host.UseSerilog(); - } - - public static void AddCustomMvc(this WebApplicationBuilder builder) - { - builder.Services.AddControllersWithViews(); - builder.Services.AddControllers(); - builder.Services.AddRazorPages(); - - } - - - public static void AddCustomDatabase(this WebApplicationBuilder builder) => - builder.Services.AddDbContext( - options => options.UseSqlServer(builder.Configuration.GetConnectionString("IdentityDb"))); - - public static void AddCustomIdentity(this WebApplicationBuilder builder) - { - builder.Services.AddIdentity() - .AddEntityFrameworkStores() - .AddDefaultTokenProviders(); - } - - - public static void AddCustomIdentityServer(this WebApplicationBuilder builder) - { - var identityServerBuilder = builder.Services.AddIdentityServer(options => - { - options.IssuerUri = "null"; - options.Authentication.CookieLifetime = TimeSpan.FromHours(2); - - options.Events.RaiseErrorEvents = true; - options.Events.RaiseInformationEvents = true; - options.Events.RaiseFailureEvents = true; - options.Events.RaiseSuccessEvents = true; - }) - .AddInMemoryIdentityResources(Config.GetResources()) - .AddInMemoryApiScopes(Config.GetApiScopes()) - .AddInMemoryApiResources(Config.GetApis()) - .AddInMemoryClients(Config.GetClients(builder.Configuration)) - .AddAspNetIdentity(); - - // not recommended for production - you need to store your key material somewhere secure - identityServerBuilder.AddDeveloperSigningCredential(); - } - - public static void AddCustomAuthentication(this WebApplicationBuilder builder) - { - builder.Services.AddAuthentication(); - } - - public static void AddCustomHealthChecks(this WebApplicationBuilder builder) - { - builder.Services.AddHealthChecks() - .AddCheck("self", () => HealthCheckResult.Healthy()) - .AddSqlServer(builder.Configuration.GetConnectionString("IdentityDb"), - name: "IdentityDB-check", - tags: new string[] { "IdentityDB" }); - } - - public static void AddCustomApplicationServices(this WebApplicationBuilder builder) - { - builder.Services.AddTransient(); - builder.Services.AddTransient, EFLoginService>(); - builder.Services.AddTransient(); - } - - static IConfiguration GetConfiguration() - { - var builder = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); - - var config = builder.Build(); - - if (config.GetValue("UseVault", false)) - { - TokenCredential credential = new ClientSecretCredential( - config["Vault:TenantId"], - config["Vault:ClientId"], - config["Vault:ClientSecret"]); - builder.AddAzureKeyVault(new Uri($"https://{config["Vault:Name"]}.vault.azure.net/"), credential); - } - - return builder.Build(); - } -}