2022-04-19 19:43:58 -04:00
|
|
|
|
using System;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using MaxMind.GeoIP2;
|
|
|
|
|
using MaxMind.GeoIP2.Responses;
|
|
|
|
|
using SharedLibraryCore.Interfaces;
|
|
|
|
|
|
|
|
|
|
namespace IW4MAdmin.Application.Misc;
|
|
|
|
|
|
|
|
|
|
public class GeoLocationService : IGeoLocationService
|
|
|
|
|
{
|
|
|
|
|
private readonly string _sourceAddress;
|
|
|
|
|
|
|
|
|
|
public GeoLocationService(string sourceAddress)
|
|
|
|
|
{
|
|
|
|
|
_sourceAddress = sourceAddress;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<IGeoLocationResult> Locate(string address)
|
|
|
|
|
{
|
|
|
|
|
CountryResponse country = null;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
using var reader = new DatabaseReader(_sourceAddress);
|
2023-01-23 17:38:16 -05:00
|
|
|
|
country = reader.Country(address);
|
2022-04-19 19:43:58 -04:00
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
// ignored
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var response = new GeoLocationResult
|
|
|
|
|
{
|
|
|
|
|
Country = country?.Country.Name ?? "Unknown",
|
|
|
|
|
CountryCode = country?.Country.IsoCode ?? ""
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return Task.FromResult((IGeoLocationResult)response);
|
|
|
|
|
}
|
|
|
|
|
}
|