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 MyCSharp.HttpUserAgentParser.AspNetCore.DependencyInjection; using MyCSharp.HttpUserAgentParser.MemoryCache.DependencyInjection; using Serilog; using Serilog.Events; namespace Galaeth.ApiServer; /// /// Entry point for service. /// internal static class Program { /// /// Entry point method. /// /// Service arguments. 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() .MinimumLevel.Override("Default", LogEventLevel.Warning) .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) .MinimumLevel.Override("System", LogEventLevel.Warning) .WriteTo.Console() .CreateLogger(); builder.Services.AddSerilog(); builder.Services.AddHttpUserAgentMemoryCachedParser(opt => { opt.CacheEntryOptions.SlidingExpiration = TimeSpan.FromMinutes(30); opt.CacheOptions.SizeLimit = 1024; }).AddHttpUserAgentParserAccessor(); builder.Services.AddHostedService(); builder.Services.AddGalaethCore(); builder.Services.AddGalaethApiServer(); builder.Services.AddGalaethServices(); builder.Services.AddGalaethDAL(); builder.Services.AddHttpContextAccessor(); builder.Services.AddControllers(); // 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(builder.Configuration.GetSection("Database")); builder.Services.Configure(builder.Configuration.GetSection("PwdHash")); builder.Services.Configure(builder.Configuration.GetSection("InitialUser")); builder.Services.Configure(builder.Configuration.GetSection("Registration")); builder.Services.Configure( builder.Configuration.GetSection("EmailDomainBlacklist")); builder.Services.Configure(builder.Configuration.GetSection("JWT")); var app = builder.Build(); // Error handling middleware. app.UseMiddleware(); app.UseMiddleware(); app.UseAuthorization(); app.MapControllers(); await app.RunAsync(); } }