73 lines
3.3 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|