diff --git a/src/Helldivers-2-API/Metrics/ClientMetric.cs b/src/Helldivers-2-API/Metrics/ClientMetric.cs index 00883da..6a3387f 100644 --- a/src/Helldivers-2-API/Metrics/ClientMetric.cs +++ b/src/Helldivers-2-API/Metrics/ClientMetric.cs @@ -71,4 +71,13 @@ public static string GetClientName(HttpContext context) return result; } + + private static string? GetSuperClient(HttpContext context) + { + if (context.Request.Headers.TryGetValue(Constants.CLIENT_HEADER_NAME, out var superClient)) + if (string.IsNullOrWhiteSpace(superClient) is false) + return superClient; + + return context.Request.Query[Constants.CLIENT_HEADER_NAME.ToLowerInvariant()]; + } } diff --git a/src/Helldivers-2-API/Middlewares/RateLimitMiddleware.cs b/src/Helldivers-2-API/Middlewares/RateLimitMiddleware.cs index 3269fab..22a70d4 100644 --- a/src/Helldivers-2-API/Middlewares/RateLimitMiddleware.cs +++ b/src/Helldivers-2-API/Middlewares/RateLimitMiddleware.cs @@ -62,8 +62,8 @@ private bool IsValidRequest(HttpContext context) if (options.Value.ValidateClients is false || context.Request.Path.StartsWithSegments("/metrics")) return true; - return context.Request.Headers.ContainsKey(Constants.CLIENT_HEADER_NAME) - && context.Request.Headers.ContainsKey(Constants.CONTACT_HEADER_NAME); + return HasSuperHeaderOrQuery(context, Constants.CLIENT_HEADER_NAME) + && HasSuperHeaderOrQuery(context, Constants.CONTACT_HEADER_NAME); } private RateLimiter GetRateLimiter(HttpContext http) @@ -122,4 +122,12 @@ private async Task RejectRequest(HttpContext context) await writer.FlushAsync(context.RequestAborted); } + + private bool HasSuperHeaderOrQuery(HttpContext context, string name) + { + if (context.Request.Headers.ContainsKey(name)) + return true; + + return context.Request.Query.ContainsKey(name.ToLowerInvariant()); + } }