Ichen Chhoeng ff0e97e36b blah
2025-11-17 11:25:33 +07:00

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();