Added IP check on loopback

This commit is contained in:
CakeAndBanana
2025-10-20 03:27:47 +02:00
parent 23ee3f98b0
commit 8a329ccbaa
4 changed files with 45 additions and 17 deletions

View File

@@ -1,9 +1,11 @@
using LightlessSyncShared;
using LightlessSyncAuthService.Utils;
using LightlessSyncShared;
using LightlessSyncShared.Services;
using LightlessSyncShared.Utils.Configuration;
using MaxMind.GeoIP2;
using MaxMind.GeoIP2.Model;
using Microsoft.AspNetCore.Http;
using System.Net;
using System.Security.Claims;
namespace LightlessSyncAuthService.Services;
@@ -35,7 +37,9 @@ public class GeoIPService : IHostedService
try
{
var ip = httpContextAccessor.GetIpAddress();
var ip = httpContextAccessor.GetClientIpAddress();
if (ip is null || IPAddress.IsLoopback(ip))
return "*";
using CancellationTokenSource waitCts = new();
waitCts.CancelAfter(TimeSpan.FromSeconds(5));
@@ -148,33 +152,29 @@ public class GeoIPService : IHostedService
internal async Task<string> GetCountryFromIP(IHttpContextAccessor httpContextAccessor)
{
if (!_useGeoIP)
{
return "*";
}
var ip = httpContextAccessor.GetClientIpAddress();
if (ip is null || IPAddress.IsLoopback(ip))
return "*";
try
{
var ip = httpContextAccessor.GetIpAddress();
using CancellationTokenSource waitCts = new();
waitCts.CancelAfter(TimeSpan.FromSeconds(5));
while (_processingReload) await Task.Delay(100, waitCts.Token).ConfigureAwait(false);
using CancellationTokenSource waitCts = new(TimeSpan.FromSeconds(5));
while (_processingReload)
await Task.Delay(100, waitCts.Token).ConfigureAwait(false);
if (_dbReader!.TryCity(ip, out var response))
{
string? country = response?.Country.IsoCode;
if (!string.IsNullOrEmpty(country)
&& response?.Location.Longitude != null)
{
return country;
}
var country = response?.Country?.IsoCode;
return !string.IsNullOrEmpty(country) ? country : "*";
}
return "*";
}
catch (Exception ex)
{
_logger.LogWarning(ex, "Error handling Geo IP country in request");
_logger.LogError(ex, "GeoIP lookup failed for {Ip}", ip);
return "*";
}
}