using System; using System.Diagnostics; using FileExposer.Models; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting.WindowsServices; using Microsoft.Extensions.Logging; namespace FileExposer; public class Program { public static int Main(string[] args) { ILogger? logger = null; WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args); _ = webApplicationBuilder.Configuration.AddUserSecrets(); AppSettings appSettings = AppSettings.Get(webApplicationBuilder.Configuration); if (string.IsNullOrEmpty(appSettings.FileWatcherConfiguration.Company)) throw new Exception("Company name must have a value!"); try { _ = webApplicationBuilder.Services.AddSingleton(); _ = webApplicationBuilder.Services.Configure(options => options.SuppressModelStateInvalidFilter = true); _ = webApplicationBuilder.Services.AddControllers(); _ = webApplicationBuilder.Services.AddDistributedMemoryCache(); _ = webApplicationBuilder.Services.AddHttpClient(); _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings); _ = webApplicationBuilder.Services.AddSwaggerGen(); _ = webApplicationBuilder.Services.AddSession(sessionOptions => { sessionOptions.IdleTimeout = TimeSpan.FromSeconds(2000); sessionOptions.Cookie.HttpOnly = true; sessionOptions.Cookie.IsEssential = true; } ); if (WindowsServiceHelpers.IsWindowsService()) { _ = webApplicationBuilder.Services.AddSingleton(); _ = webApplicationBuilder.Logging.AddEventLog(settings => { #pragma warning disable CA1416 if (string.IsNullOrEmpty(settings.SourceName)) settings.SourceName = webApplicationBuilder.Environment.ApplicationName; #pragma warning restore }); } WebApplication webApplication = webApplicationBuilder.Build(); if (Debugger.IsAttached) webApplication.Services.GetRequiredService(); logger = webApplication.Services.GetRequiredService>(); _ = webApplication.UseCors(corsPolicyBuilder => corsPolicyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); if (!webApplicationBuilder.Environment.IsDevelopment()) { _ = webApplication.UseExceptionHandler("/Error"); _ = webApplication.UseHttpsRedirection(); _ = webApplication.UseHsts(); } else { _ = webApplication.UseSwagger(); _ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Server V1")); } _ = webApplication.UseSession(); _ = webApplication.MapControllers(); logger.LogInformation("Starting Web Application"); webApplication.Run(); return 0; } catch (Exception ex) { try { logger?.LogCritical(ex, "Host terminated unexpectedly"); } catch (Exception) { } throw; } } }