2025-02-17 22:12:35 -05:00

73 lines
3.3 KiB
C#

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<Startup>();
}).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();
}
}
}