using Fengling.AuthService.Configuration; using Fengling.AuthService.Data; using Fengling.AuthService.Models; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.OpenApi.Models; using OpenTelemetry; using OpenTelemetry.Resources; using OpenTelemetry.Trace; using Serilog; var builder = WebApplication.CreateBuilder(args); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) .Enrich.FromLogContext() .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}") .CreateLogger(); builder.Host.UseSerilog(); builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"))); builder.Services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); builder.Services.AddOpenIddictConfiguration(builder.Configuration); builder.Services.AddOpenTelemetry() .ConfigureResource(resource => resource.AddService("Fengling.AuthService")) .WithTracing(tracing => tracing.AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddSource("OpenIddict.Server.AspNetCore") .AddOtlpExporter()); builder.Services.AddControllers(); builder.Services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "Fengling Auth Service", Version = "v1", Description = "Authentication and authorization service using OpenIddict" }); options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, Flows = new OpenApiOAuthFlows { Password = new OpenApiOAuthFlow { TokenUrl = new Uri("/connect/token", UriKind.Relative) } } }); }); var app = builder.Build(); using (var scope = app.Services.CreateScope()) { await Data.SeedData.Initialize(scope.ServiceProvider); } app.UseSwagger(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "Fengling Auth Service v1"); options.OAuthClientId("swagger-ui"); options.OAuthUsePkce(); }); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();