using System.Net; namespace LightlessSyncAuthService.Utils { public static class HttpContextAccessorExtensions { public static IPAddress? GetClientIpAddress(this IHttpContextAccessor accessor) { var context = accessor.HttpContext; if (context == null) return null; string[] headerKeys = { "CF-Connecting-IP", "X-Forwarded-For", "X-Real-IP" }; foreach (var key in headerKeys) { if (context.Request.Headers.TryGetValue(key, out var values)) { var ipCandidate = values.FirstOrDefault()?.Split(',').FirstOrDefault()?.Trim(); if (IPAddress.TryParse(ipCandidate, out var parsed)) return parsed; } } return context.Connection?.RemoteIpAddress; } } }