Add project files.
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
// Copyright (c) Jan Škoruba. All Rights Reserved.
|
||||
// Licensed under the Apache License, Version 2.0.
|
||||
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using HealthChecks.UI.Client;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using NSwag.AspNetCore;
|
||||
using Skoruba.AuditLogging.EntityFramework.Entities;
|
||||
using LiteCharmsSecurity.Admin.Api.Configuration;
|
||||
using Skoruba.Duende.IdentityServer.Admin.EntityFramework.Configuration.Configuration;
|
||||
using LiteCharmsSecurity.Admin.EntityFramework.Shared.DbContexts;
|
||||
using LiteCharmsSecurity.Admin.EntityFramework.Shared.Entities.Identity;
|
||||
using Skoruba.Duende.IdentityServer.Admin.UI.Api.Configuration;
|
||||
using Skoruba.Duende.IdentityServer.Admin.UI.Api.Helpers;
|
||||
using Skoruba.Duende.IdentityServer.Shared.Configuration.Helpers;
|
||||
using LiteCharmsSecurity.Shared.Dtos;
|
||||
using LiteCharmsSecurity.Shared.Dtos.Identity;
|
||||
using StartupHelpers = Skoruba.Duende.IdentityServer.Shared.Configuration.Helpers.StartupHelpers;
|
||||
|
||||
namespace LiteCharmsSecurity.Admin.Api
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
public Startup(IWebHostEnvironment env, IConfiguration configuration)
|
||||
{
|
||||
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
|
||||
HostingEnvironment = env;
|
||||
Configuration = configuration;
|
||||
}
|
||||
|
||||
public IConfiguration Configuration { get; }
|
||||
|
||||
public IWebHostEnvironment HostingEnvironment { get; }
|
||||
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
var adminApiConfiguration = Configuration.GetSection(nameof(AdminApiConfiguration)).Get<AdminApiConfiguration>();
|
||||
services.AddSingleton(adminApiConfiguration);
|
||||
|
||||
var databaseProviderConfiguration = Configuration.GetSection(nameof(DatabaseProviderConfiguration)).Get<DatabaseProviderConfiguration>();
|
||||
var databaseMigration = StartupHelpers.GetDatabaseMigrationsConfiguration(Configuration, MigrationAssemblyConfiguration.GetMigrationAssemblyByProvider(databaseProviderConfiguration));
|
||||
|
||||
// Add DbContexts
|
||||
RegisterDbContexts(services, databaseMigration);
|
||||
|
||||
// Add email senders which is currently setup for SendGrid and SMTP
|
||||
services.AddEmailSenders(Configuration);
|
||||
|
||||
// Add authentication services
|
||||
RegisterAuthentication(services);
|
||||
|
||||
// Add authorization services
|
||||
RegisterAuthorization(services);
|
||||
|
||||
services.AddIdentityServerAdminApi<AdminIdentityDbContext, IdentityServerConfigurationDbContext, IdentityServerPersistedGrantDbContext, IdentityServerDataProtectionDbContext, AdminLogDbContext, AdminAuditLogDbContext, AdminConfigurationDbContext, AuditLog,
|
||||
IdentityUserDto, IdentityRoleDto, UserIdentity, UserIdentityRole, string, UserIdentityUserClaim, UserIdentityUserRole,
|
||||
UserIdentityUserLogin, UserIdentityRoleClaim, UserIdentityUserToken, UserIdentityPasskey,
|
||||
IdentityUsersDto, IdentityRolesDto, IdentityUserRolesDto,
|
||||
IdentityUserClaimsDto, IdentityUserProviderDto, IdentityUserProvidersDto, IdentityUserChangePasswordDto,
|
||||
IdentityRoleClaimsDto, IdentityUserClaimDto, IdentityRoleClaimDto>(Configuration, adminApiConfiguration);
|
||||
|
||||
services.AddSwaggerServices(adminApiConfiguration);
|
||||
|
||||
services.AddIdSHealthChecks<IdentityServerConfigurationDbContext, IdentityServerPersistedGrantDbContext, AdminIdentityDbContext, AdminLogDbContext, AdminAuditLogDbContext, IdentityServerDataProtectionDbContext>(Configuration, adminApiConfiguration);
|
||||
}
|
||||
|
||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, AdminApiConfiguration adminApiConfiguration)
|
||||
{
|
||||
app.AddForwardHeaders(Configuration);
|
||||
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
|
||||
app.UseOpenApi();
|
||||
app.UseSwaggerUi(settings =>
|
||||
{
|
||||
settings.OAuth2Client = new OAuth2ClientSettings
|
||||
{
|
||||
ClientId = adminApiConfiguration.OidcSwaggerUIClientId,
|
||||
AppName = adminApiConfiguration.ApiName,
|
||||
UsePkceWithAuthorizationCodeGrant = true,
|
||||
ClientSecret = null
|
||||
};
|
||||
});
|
||||
|
||||
app.UseRouting();
|
||||
UseAuthentication(app);
|
||||
app.UseCors();
|
||||
app.UseAuthorization();
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapControllers();
|
||||
|
||||
endpoints.MapHealthChecks("/health", new HealthCheckOptions
|
||||
{
|
||||
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public virtual void RegisterDbContexts(IServiceCollection services,
|
||||
DatabaseMigrationsConfiguration databaseMigration)
|
||||
{
|
||||
services.AddDbContexts<AdminIdentityDbContext, IdentityServerConfigurationDbContext, IdentityServerPersistedGrantDbContext, AdminLogDbContext, AdminAuditLogDbContext, IdentityServerDataProtectionDbContext, AdminConfigurationDbContext, AuditLog>(Configuration, databaseMigration);
|
||||
}
|
||||
|
||||
public virtual void RegisterAuthentication(IServiceCollection services)
|
||||
{
|
||||
services.AddApiAuthentication<AdminIdentityDbContext, UserIdentity, UserIdentityRole>(Configuration);
|
||||
}
|
||||
|
||||
public virtual void RegisterAuthorization(IServiceCollection services)
|
||||
{
|
||||
services.AddAuthorizationPolicies();
|
||||
}
|
||||
|
||||
public virtual void UseAuthentication(IApplicationBuilder app)
|
||||
{
|
||||
app.UseAuthentication();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user