diff --git a/Application/EventParsers/BaseEventParser.cs b/Application/EventParsers/BaseEventParser.cs index 105e2ec7..e778f17e 100644 --- a/Application/EventParsers/BaseEventParser.cs +++ b/Application/EventParsers/BaseEventParser.cs @@ -68,7 +68,7 @@ namespace IW4MAdmin.Application.EventParsers Configuration.JoinTeam.AddMapping(ParserRegex.GroupType.OriginName, 5); Configuration.Damage.Pattern = - @"^(D);(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+|0);(-?[0-9]+);(axis|allies|world|none)?;([^;]{1,32});(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+|0)?;(-?[0-9]+);(axis|allies|world|none)?;([^;]{1,32})?;((?:[0-9]+|[a-z]+|_|\+)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$"; + @"^(D);(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+|0);(-?[0-9]+);(axis|allies|world|none|team\d)?;([^;]{1,32});(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+|0)?;(-?[0-9]+);(axis|allies|world|none|team\d)?;([^;]{1,32})?;((?:[0-9]+|[a-z]+|_|\+)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$"; Configuration.Damage.AddMapping(ParserRegex.GroupType.EventType, 1); Configuration.Damage.AddMapping(ParserRegex.GroupType.TargetNetworkId, 2); Configuration.Damage.AddMapping(ParserRegex.GroupType.TargetClientNumber, 3); @@ -84,7 +84,7 @@ namespace IW4MAdmin.Application.EventParsers Configuration.Damage.AddMapping(ParserRegex.GroupType.HitLocation, 13); Configuration.Kill.Pattern = - @"^(K);(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+|0);(-?[0-9]+);(axis|allies|world|none)?;([^;]{1,32});(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+|0)?;(-?[0-9]+);(axis|allies|world|none)?;([^;]{1,32})?;((?:[0-9]+|[a-z]+|_|\+)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$"; + @"^(K);(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+|0);(-?[0-9]+);(axis|allies|world|none|team\d)?;([^;]{1,32});(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+|0)?;(-?[0-9]+);(axis|allies|world|none|team\d)?;([^;]{1,32})?;((?:[0-9]+|[a-z]+|_|\+)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$"; Configuration.Kill.AddMapping(ParserRegex.GroupType.EventType, 1); Configuration.Kill.AddMapping(ParserRegex.GroupType.TargetNetworkId, 2); Configuration.Kill.AddMapping(ParserRegex.GroupType.TargetClientNumber, 3); diff --git a/Application/IO/GameLogReaderHttp.cs b/Application/IO/GameLogReaderHttp.cs index 16a4437d..f521bfd1 100644 --- a/Application/IO/GameLogReaderHttp.cs +++ b/Application/IO/GameLogReaderHttp.cs @@ -50,7 +50,7 @@ namespace IW4MAdmin.Application.IO { // parse each line var lines = response.Data - .Split(Environment.NewLine) + .Split('\n') .Where(_line => _line.Length > 0); foreach (string eventLine in lines) diff --git a/WebfrontCore/Startup.cs b/WebfrontCore/Startup.cs index 5ad20e8b..6af15888 100644 --- a/WebfrontCore/Startup.cs +++ b/WebfrontCore/Startup.cs @@ -44,24 +44,34 @@ namespace WebfrontCore _builder => { _builder.AllowAnyOrigin() - .AllowAnyMethod() - .AllowAnyHeader(); + .AllowAnyMethod() + .AllowAnyHeader(); }); }); - + services.AddStackPolicy(options => { - options.MaxConcurrentRequests = int.Parse(Environment.GetEnvironmentVariable("MaxConcurrentRequests") ?? "1"); + options.MaxConcurrentRequests = + int.Parse(Environment.GetEnvironmentVariable("MaxConcurrentRequests") ?? "1"); options.RequestQueueLimit = int.Parse(Environment.GetEnvironmentVariable("RequestQueueLimit") ?? "1"); }); + services.AddRateLimiter(options => options.AddConcurrencyLimiter("concurrencyPolicy", opt => + { + opt.PermitLimit = 2; + opt.QueueLimit = 25; + opt.QueueProcessingOrder = QueueProcessingOrder.NewestFirst; + })); + IEnumerable pluginAssemblies() { string pluginDir = $"{Utilities.OperatingDirectory}Plugins{Path.DirectorySeparatorChar}"; if (Directory.Exists(pluginDir)) { - var dllFileNames = Directory.GetFiles($"{Utilities.OperatingDirectory}Plugins{Path.DirectorySeparatorChar}", "*.dll"); + var dllFileNames = + Directory.GetFiles($"{Utilities.OperatingDirectory}Plugins{Path.DirectorySeparatorChar}", + "*.dll"); return dllFileNames.Select(_file => Assembly.LoadFrom(_file)); } @@ -89,7 +99,7 @@ namespace WebfrontCore } services.AddHttpContextAccessor(); - + services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { @@ -103,7 +113,9 @@ namespace WebfrontCore services.AddTransient, FindClientRequestValidator>(); services.AddSingleton, ClientService>(); services.AddSingleton, StatsResourceQueryHelper>(); - services.AddSingleton, AdvancedClientStatsResourceQueryHelper>(); + services + .AddSingleton, + AdvancedClientStatsResourceQueryHelper>(); services.AddSingleton(typeof(IDataValueCache<,>), typeof(DataValueCache<,>)); services.AddSingleton, BanInfoResourceQueryHelper>(); } @@ -115,7 +127,8 @@ namespace WebfrontCore { if (_context.HttpContext.Response.StatusCode == (int)HttpStatusCode.NotFound) { - _context.HttpContext.Response.Redirect($"/Home/ResponseStatusCode?statusCode={_context.HttpContext.Response.StatusCode}"); + _context.HttpContext.Response.Redirect( + $"/Home/ResponseStatusCode?statusCode={_context.HttpContext.Response.StatusCode}"); } return Task.CompletedTask; @@ -133,17 +146,10 @@ namespace WebfrontCore if (Program.Manager.GetApplicationSettings().Configuration().EnableWebfrontConnectionWhitelist) { - app.UseMiddleware(serviceProvider.GetService>(), serviceProvider.GetRequiredService().WebfrontConnectionWhitelist); + app.UseMiddleware(serviceProvider.GetService>(), + serviceProvider.GetRequiredService().WebfrontConnectionWhitelist); } - app.UseRateLimiter(new RateLimiterOptions() - .AddConcurrencyLimiter("concurrencyPolicy", (options) => - { - options.PermitLimit = 2; - options.QueueLimit = 25; - options.QueueProcessingOrder = QueueProcessingOrder.NewestFirst; - })); - app.UseStaticFiles(); app.UseAuthentication(); app.UseCors("AllowAll"); @@ -153,6 +159,7 @@ namespace WebfrontCore app.UseRouting(); app.UseAuthorization(); + app.UseRateLimiter(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}")