From 317c5f80740588960951a6ffbeb95169fd4bc5a1 Mon Sep 17 00:00:00 2001 From: IP2Location Date: Wed, 21 Aug 2024 13:32:42 +0800 Subject: [PATCH] Added IP2Location.io API as failover geolocation API --- Bloxstrap/Integrations/ActivityWatcher.cs | 41 +++++++++++++++++------ Bloxstrap/Models/IP2LocationIOResponse.cs | 14 ++++++++ 2 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 Bloxstrap/Models/IP2LocationIOResponse.cs diff --git a/Bloxstrap/Integrations/ActivityWatcher.cs b/Bloxstrap/Integrations/ActivityWatcher.cs index e15cd2d..aabd31b 100644 --- a/Bloxstrap/Integrations/ActivityWatcher.cs +++ b/Bloxstrap/Integrations/ActivityWatcher.cs @@ -301,17 +301,36 @@ string location = ""; var ipInfo = await Http.GetJson($"https://ipinfo.io/{ActivityMachineAddress}/json"); - if (ipInfo is null) - return $"? ({Resources.Strings.ActivityTracker_LookupFailed})"; - - if (string.IsNullOrEmpty(ipInfo.Country)) - location = "?"; - else if (ipInfo.City == ipInfo.Region) - location = $"{ipInfo.Region}, {ipInfo.Country}"; - else - location = $"{ipInfo.City}, {ipInfo.Region}, {ipInfo.Country}"; - - if (!ActivityInGame) + if (ipInfo is null) + { + var ip2LocationIO = await Http.GetJson($"https://api.ip2location.io/?ip={ActivityMachineAddress}"); + + if (ip2LocationIO is null) + { + return $"? ({Resources.Strings.ActivityTracker_LookupFailed})"; + } + else + { + if (string.IsNullOrEmpty(ip2LocationIO.Country)) + location = "?"; + else if (ip2LocationIO.City == ip2LocationIO.Region) + location = $"{ip2LocationIO.Region}, {ip2LocationIO.Country}"; + else + location = $"{ip2LocationIO.City}, {ip2LocationIO.Region}, {ip2LocationIO.Country}"; + } + } + else + { + if (string.IsNullOrEmpty(ipInfo.Country)) + location = "?"; + else if (ipInfo.City == ipInfo.Region) + location = $"{ipInfo.Region}, {ipInfo.Country}"; + else + location = $"{ipInfo.City}, {ipInfo.Region}, {ipInfo.Country}"; + + } + + if (!ActivityInGame) return $"? ({Resources.Strings.ActivityTracker_LeftGame})"; GeolocationCache[ActivityMachineAddress] = location; diff --git a/Bloxstrap/Models/IP2LocationIOResponse.cs b/Bloxstrap/Models/IP2LocationIOResponse.cs new file mode 100644 index 0000000..831d99a --- /dev/null +++ b/Bloxstrap/Models/IP2LocationIOResponse.cs @@ -0,0 +1,14 @@ +namespace Bloxstrap.Models +{ + public class IP2LocationIOResponse + { + [JsonPropertyName("city_name")] + public string City { get; set; } = null!; + + [JsonPropertyName("country_code")] + public string Country { get; set; } = null!; + + [JsonPropertyName("region_name")] + public string Region { get; set; } = null!; + } +}