global using QuestShare.Common.API.Share; global using QuestShare.Common.API; global using Serilog; using Microsoft.AspNetCore.RateLimiting; using Microsoft.AspNetCore.Server.Kestrel.Https; using System.Net; namespace QuestShare.Server { public class Program { public static void Main(string[] args) { var log = new LoggerConfiguration() .WriteTo.Console() .MinimumLevel.Debug() .CreateLogger(); Log.Logger = log; var builder = new HostBuilder() .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel(serverOptions => { serverOptions.Listen(IPAddress.Any, 8080); serverOptions.ConfigureHttpsDefaults(httpsOptions => { httpsOptions.ServerCertificate = null; httpsOptions.ClientCertificateMode = ClientCertificateMode.NoCertificate; }); }); webBuilder.UseStartup(); }).ConfigureServices(services => { services.AddRateLimiter(_ => _.AddFixedWindowLimiter(policyName: "ClientPolicy", options => { options.PermitLimit = 5; options.Window = TimeSpan.FromSeconds(15); })); services.AddRateLimiter(_ => _.AddSlidingWindowLimiter(policyName: "UpdatePolicy", options => { options.PermitLimit = 5; options.Window = TimeSpan.FromSeconds(5); })); services.AddRateLimiter(_ => _.AddSlidingWindowLimiter(policyName: "PartyCheckPolicy", options => { options.PermitLimit = 1; options.Window = TimeSpan.FromSeconds(30); })); }).ConfigureLogging(logging => { logging.AddConsole(); logging.AddDebug(); logging.AddFilter("Microsoft.AspNetCore.SignalR", LogLevel.Information); logging.AddFilter("Microsoft.AspNetCore.Http.Connections", LogLevel.Information); }).UseSerilog() ; var secretKey = Environment.GetEnvironmentVariable("QUESTSHARE_SECRET"); if (string.IsNullOrEmpty(secretKey)) { Console.WriteLine("Please set the QUESTSHARE_SECRET environment variable. A hardcoded default is being used."); Environment.SetEnvironmentVariable("QUESTSHARE_SECRET", "A1B2C3D4E5F6G7H8I9J0"); } var database = Environment.GetEnvironmentVariable("QUESTSHARE_DATABASE"); if (string.IsNullOrEmpty(database)) { Console.WriteLine("Please set the QUESTSHARE_DATABASE environment variable. A hardcoded default is being used."); Environment.SetEnvironmentVariable("QUESTSHARE_DATABASE", "Host=localhost;User ID=questshare;Password=hellofriend;Database=questshare;Include Error Detail=True"); } var app = builder.Build(); app.Run(); } } }