69 lines
2.4 KiB
C#
69 lines
2.4 KiB
C#
using DotNetEnv;
|
|
using khmereid_backend.Data;
|
|
using khmereid_backend.Services;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using khmereid_backend.Integrations;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Authentication;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
if (builder.Environment.IsDevelopment() && File.Exists("../.env"))
|
|
{
|
|
Env.Load("../.env");
|
|
}
|
|
|
|
builder.Configuration
|
|
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
|
|
.AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: false)
|
|
.AddEnvironmentVariables();
|
|
|
|
var dbHost = builder.Configuration["DB_HOST"];
|
|
var dbPort = builder.Configuration["DB_PORT"];
|
|
var dbUser = builder.Configuration["DB_USER"];
|
|
var dbPass = builder.Configuration["DB_PASS"];
|
|
var dbName = builder.Configuration["DB_NAME"];
|
|
var dbSsl = builder.Configuration["DB_SSL_MODE"] ?? "Disable";
|
|
|
|
var connectionString = $"Host={dbHost};Port={dbPort};Username={dbUser};Password={dbPass};Database={dbName};Ssl Mode={dbSsl}";
|
|
|
|
builder.Services.AddDbContext<AppDbContext>(options =>
|
|
{
|
|
options.UseNpgsql(connectionString).UseSnakeCaseNamingConvention();
|
|
});
|
|
|
|
builder.Services.AddSingleton<IAuthnApi, KratosApi>();
|
|
builder.Services.AddScoped<AuthService>();
|
|
builder.Services.AddScoped<UserService>();
|
|
|
|
builder.Services.AddAuthentication(options =>
|
|
{
|
|
options.DefaultAuthenticateScheme = "Kratos";
|
|
options.DefaultChallengeScheme = "Kratos";
|
|
options.DefaultScheme = "Kratos";
|
|
}).AddScheme<AuthenticationSchemeOptions, KratosMiddleware>("Kratos", _ => { });
|
|
|
|
builder.Services.AddAuthorizationBuilder()
|
|
.SetFallbackPolicy(new AuthorizationPolicyBuilder()
|
|
.RequireAuthenticatedUser()
|
|
.Build());
|
|
|
|
builder.Services.AddControllers().AddJsonOptions(options =>
|
|
{
|
|
options.JsonSerializerOptions.DefaultIgnoreCondition =
|
|
System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault;
|
|
});
|
|
|
|
var app = builder.Build();
|
|
|
|
await using var scope = app.Services.CreateAsyncScope();
|
|
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
|
var canConnect = await db.Database.CanConnectAsync();
|
|
app.Logger.LogInformation("Can connect to database: {CanConnect}", canConnect);
|
|
|
|
app.MapGet("/health", () => Results.Ok("I'm good.")).AllowAnonymous().WithOpenApi();
|
|
|
|
app.UseAuthentication();
|
|
app.UseAuthorization();
|
|
app.MapControllers();
|
|
app.Run();
|