111 lines
3.6 KiB
C#
111 lines
3.6 KiB
C#
using System;
|
|
using System.Linq;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Cors.Infrastructure;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Serilog;
|
|
using TakeoutSaaS.Application.App.Extensions;
|
|
using TakeoutSaaS.Application.Identity.Extensions;
|
|
using TakeoutSaaS.Application.Messaging.Extensions;
|
|
using TakeoutSaaS.Application.Sms.Extensions;
|
|
using TakeoutSaaS.Application.Storage.Extensions;
|
|
using TakeoutSaaS.Infrastructure.App.Extensions;
|
|
using TakeoutSaaS.Infrastructure.Identity.Extensions;
|
|
using TakeoutSaaS.Module.Authorization.Extensions;
|
|
using TakeoutSaaS.Module.Dictionary.Extensions;
|
|
using TakeoutSaaS.Module.Messaging.Extensions;
|
|
using TakeoutSaaS.Module.Scheduler.Extensions;
|
|
using TakeoutSaaS.Module.Sms.Extensions;
|
|
using TakeoutSaaS.Module.Storage.Extensions;
|
|
using TakeoutSaaS.Module.Tenancy.Extensions;
|
|
using TakeoutSaaS.Shared.Web.Extensions;
|
|
using TakeoutSaaS.Shared.Web.Swagger;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
builder.Configuration
|
|
.AddJsonFile("appsettings.Seed.json", optional: true, reloadOnChange: true)
|
|
.AddJsonFile($"appsettings.Seed.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true);
|
|
|
|
builder.Host.UseSerilog((context, _, configuration) =>
|
|
{
|
|
configuration
|
|
.Enrich.FromLogContext()
|
|
.Enrich.WithProperty("Service", "AdminApi")
|
|
.WriteTo.Console();
|
|
});
|
|
|
|
builder.Services.AddSharedWebCore();
|
|
builder.Services.AddSharedSwagger(options =>
|
|
{
|
|
options.Title = "外卖SaaS - 管理后台";
|
|
options.Description = "管理后台 API 文档";
|
|
options.EnableAuthorization = true;
|
|
});
|
|
builder.Services.AddIdentityApplication();
|
|
builder.Services.AddIdentityInfrastructure(builder.Configuration, enableAdminSeed: true);
|
|
builder.Services.AddAppInfrastructure(builder.Configuration);
|
|
builder.Services.AddAppApplication();
|
|
builder.Services.AddJwtAuthentication(builder.Configuration);
|
|
builder.Services.AddAuthorization();
|
|
builder.Services.AddPermissionAuthorization();
|
|
builder.Services.AddTenantResolution(builder.Configuration);
|
|
builder.Services.AddDictionaryModule(builder.Configuration);
|
|
builder.Services.AddStorageModule(builder.Configuration);
|
|
builder.Services.AddStorageApplication();
|
|
builder.Services.AddSmsModule(builder.Configuration);
|
|
builder.Services.AddSmsApplication(builder.Configuration);
|
|
builder.Services.AddMessagingModule(builder.Configuration);
|
|
builder.Services.AddMessagingApplication();
|
|
builder.Services.AddSchedulerModule(builder.Configuration);
|
|
|
|
var adminOrigins = ResolveCorsOrigins(builder.Configuration, "Cors:Admin");
|
|
builder.Services.AddCors(options =>
|
|
{
|
|
options.AddPolicy("AdminApiCors", policy =>
|
|
{
|
|
ConfigureCorsPolicy(policy, adminOrigins);
|
|
});
|
|
});
|
|
|
|
var app = builder.Build();
|
|
|
|
app.UseCors("AdminApiCors");
|
|
app.UseTenantResolution();
|
|
app.UseSharedWebCore();
|
|
app.UseAuthentication();
|
|
app.UseAuthorization();
|
|
app.UseSharedSwagger();
|
|
app.UseSchedulerDashboard(builder.Configuration);
|
|
|
|
app.MapControllers();
|
|
app.Run();
|
|
|
|
static string[] ResolveCorsOrigins(IConfiguration configuration, string sectionKey)
|
|
{
|
|
var origins = configuration.GetSection(sectionKey).Get<string[]>();
|
|
return origins?
|
|
.Where(origin => !string.IsNullOrWhiteSpace(origin))
|
|
.Distinct(StringComparer.OrdinalIgnoreCase)
|
|
.ToArray() ?? Array.Empty<string>();
|
|
}
|
|
|
|
static void ConfigureCorsPolicy(CorsPolicyBuilder policy, string[] origins)
|
|
{
|
|
if (origins.Length == 0)
|
|
{
|
|
policy.AllowAnyOrigin();
|
|
}
|
|
else
|
|
{
|
|
policy.WithOrigins(origins)
|
|
.AllowCredentials();
|
|
}
|
|
|
|
policy
|
|
.AllowAnyHeader()
|
|
.AllowAnyMethod();
|
|
}
|