Browse Source

Remove Serilog from Identity.API and clean up

davidfowl/common-services
Reuben Bond 1 year ago
parent
commit
5342c86af0
4 changed files with 44 additions and 168 deletions
  1. +1
    -2
      src/Services/Identity/Identity.API/GlobalUsings.cs
  2. +0
    -6
      src/Services/Identity/Identity.API/Identity.API.csproj
  3. +43
    -43
      src/Services/Identity/Identity.API/Program.cs
  4. +0
    -117
      src/Services/Identity/Identity.API/ProgramExtensions.cs

+ 1
- 2
src/Services/Identity/Identity.API/GlobalUsings.cs View File

@ -1,4 +1,4 @@
global using Azure.Core;
global using Azure.Core;
global using Azure.Identity; global using Azure.Identity;
global using HealthChecks.UI.Client; global using HealthChecks.UI.Client;
global using IdentityModel; global using IdentityModel;
@ -41,7 +41,6 @@ global using System.Collections.Generic;
global using System.ComponentModel.DataAnnotations; global using System.ComponentModel.DataAnnotations;
global using System.Data.SqlClient; global using System.Data.SqlClient;
global using System.IdentityModel.Tokens.Jwt; global using System.IdentityModel.Tokens.Jwt;
global using System.IO;
global using System.Linq; global using System.Linq;
global using System.Security.Claims; global using System.Security.Claims;
global using System.Text.RegularExpressions; global using System.Text.RegularExpressions;


+ 0
- 6
src/Services/Identity/Identity.API/Identity.API.csproj View File

@ -37,12 +37,6 @@
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" />
<PackageReference Include="Microsoft.Web.LibraryManager.Build" /> <PackageReference Include="Microsoft.Web.LibraryManager.Build" />
<PackageReference Include="Polly" /> <PackageReference Include="Polly" />
<PackageReference Include="Serilog.AspNetCore" />
<PackageReference Include="Serilog.Enrichers.Environment" />
<PackageReference Include="Serilog.Settings.Configuration" />
<PackageReference Include="Serilog.Sinks.Console" />
<PackageReference Include="Serilog.Sinks.Http" />
<PackageReference Include="Serilog.Sinks.Seq" />
<PackageReference Include="Swashbuckle.AspNetCore" /> <PackageReference Include="Swashbuckle.AspNetCore" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" /> <PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" />
<PackageReference Include="System.Data.SqlClient" /> <PackageReference Include="System.Data.SqlClient" />


+ 43
- 43
src/Services/Identity/Identity.API/Program.cs View File

@ -1,5 +1,4 @@
var appName = "Identity.API";
var builder = WebApplication.CreateBuilder();
var builder = WebApplication.CreateBuilder(args);
if (builder.Configuration.GetValue<bool>("UseVault", false)) if (builder.Configuration.GetValue<bool>("UseVault", false))
{ {
@ -10,21 +9,43 @@ if (builder.Configuration.GetValue<bool>("UseVault", false))
builder.Configuration.AddAzureKeyVault(new Uri($"https://{builder.Configuration["Vault:Name"]}.vault.azure.net/"), credential); 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<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("IdentityDb")));
builder.Services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.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<ApplicationUser>()
.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<IProfileService, ProfileService>();
builder.Services.AddTransient<ILoginService<ApplicationUser>, EFLoginService>();
builder.Services.AddTransient<IRedirectService, RedirectService>();
var app = builder.Build();
var pathBase = builder.Configuration["PATH_BASE"]; var pathBase = builder.Configuration["PATH_BASE"];
if (!string.IsNullOrEmpty(pathBase)) if (!string.IsNullOrEmpty(pathBase))
@ -35,16 +56,11 @@ app.UseStaticFiles();
// This cookie policy fixes login issues with Chrome 80+ using HHTP // This cookie policy fixes login issues with Chrome 80+ using HHTP
app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.Lax }); app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.Lax });
app.UseRouting(); app.UseRouting();
app.UseIdentityServer(); app.UseIdentityServer();
app.UseAuthorization(); app.UseAuthorization();
app.MapDefaultControllerRoute(); app.MapDefaultControllerRoute();
app.MapHealthChecks("/hc", new HealthCheckOptions() app.MapHealthChecks("/hc", new HealthCheckOptions()
{ {
Predicate = _ => true, Predicate = _ => true,
@ -54,29 +70,13 @@ app.MapHealthChecks("/liveness", new HealthCheckOptions
{ {
Predicate = r => r.Name.Contains("self") 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();
}
await app.RunAsync();

+ 0
- 117
src/Services/Identity/Identity.API/ProgramExtensions.cs View File

@ -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<ApplicationDbContext>(
options => options.UseSqlServer(builder.Configuration.GetConnectionString("IdentityDb")));
public static void AddCustomIdentity(this WebApplicationBuilder builder)
{
builder.Services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.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<ApplicationUser>();
// 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<IProfileService, ProfileService>();
builder.Services.AddTransient<ILoginService<ApplicationUser>, EFLoginService>();
builder.Services.AddTransient<IRedirectService, RedirectService>();
}
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<bool>("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();
}
}

Loading…
Cancel
Save