galaeth-draft/Galaeth.ApiServer/Program.cs

121 lines
4.4 KiB
C#
Raw Permalink Normal View History

2024-11-17 10:31:01 +01:00
using Galaeth.ApiServer.Extensions;
using Galaeth.ApiServer.HostedServices;
using Galaeth.ApiServer.Middleware;
using Galaeth.Core.Configuration;
using Galaeth.Services.Configuration;
using Galaeth.Services.Profiles;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.OpenApi.Models;
2024-11-17 10:31:01 +01:00
using MyCSharp.HttpUserAgentParser.AspNetCore.DependencyInjection;
using MyCSharp.HttpUserAgentParser.MemoryCache.DependencyInjection;
using Serilog;
namespace Galaeth.ApiServer;
/// <summary>
/// Entry point for service.
/// </summary>
internal static class Program
{
/// <summary>
/// Entry point method.
/// </summary>
/// <param name="args">Service arguments.</param>
public static async Task Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Configuration
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();
builder.Services.AddSerilog();
builder.Services.AddHttpUserAgentMemoryCachedParser(opt =>
{
opt.CacheEntryOptions.SlidingExpiration = TimeSpan.FromMinutes(30);
opt.CacheOptions.SizeLimit = 1024;
}).AddHttpUserAgentParserAccessor();
builder.Services.AddHostedService<StartupService>();
builder.Services.AddGalaethCore();
builder.Services.AddGalaethApiServer();
builder.Services.AddGalaethServices();
builder.Services.AddGalaethDAL();
builder.Services.AddHttpContextAccessor();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(setup =>
{
var jwtSecurityScheme = new OpenApiSecurityScheme
{
BearerFormat = "JWT",
Name = "JWT Authentication",
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http,
Scheme = JwtBearerDefaults.AuthenticationScheme,
Description = "Paste your access token below",
Reference = new OpenApiReference
{
Id = JwtBearerDefaults.AuthenticationScheme,
Type = ReferenceType.SecurityScheme,
},
};
setup.AddSecurityDefinition(jwtSecurityScheme.Reference.Id, jwtSecurityScheme);
setup.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{ jwtSecurityScheme, Array.Empty<string>() },
});
});
2024-11-17 10:31:01 +01:00
// Setup authentication.
var jwtConfig = new JwtConfiguration();
builder.Configuration.Bind("JWT", jwtConfig);
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => options.TokenValidationParameters = jwtConfig.ToTokenValidationParameters());
builder.Services.AddAuthentication();
builder.Services.AddAuthorization();
// Setup automapping.
builder.Services.AddAutoMapper(typeof(AutomapperProfile).Assembly);
// Setup configuration.
builder.Services.Configure<DatabaseConfiguration>(builder.Configuration.GetSection("Database"));
builder.Services.Configure<PwdHashConfiguration>(builder.Configuration.GetSection("PwdHash"));
builder.Services.Configure<InitialUserConfiguration>(builder.Configuration.GetSection("InitialUser"));
builder.Services.Configure<RegistrationConfiguration>(builder.Configuration.GetSection("Registration"));
builder.Services.Configure<EmailDomainBlacklistConfiguration>(
builder.Configuration.GetSection("EmailDomainBlacklist"));
builder.Services.Configure<JwtConfiguration>(builder.Configuration.GetSection("JWT"));
var app = builder.Build();
// Error handling middleware.
app.UseMiddleware<ExceptionMiddleware>();
app.UseMiddleware<StatusCodeMiddleware>();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
2024-11-17 10:31:01 +01:00
app.UseAuthorization();
app.MapControllers();
await app.RunAsync();
}
}