From 8ddeb80a743d09ef6b09cde75486600f39b4d870 Mon Sep 17 00:00:00 2001 From: Wannes Gennar Date: Thu, 12 Feb 2026 07:36:55 +0100 Subject: [PATCH] feat: allow passing super headers as query --- src/Helldivers-2-API/Metrics/ClientMetric.cs | 9 +++++++++ .../Middlewares/RateLimitMiddleware.cs | 12 ++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) 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()); + } }