public async Task <ActionResult> IPAddressLookup(string ipAddress, bool geoData) { if (string.IsNullOrWhiteSpace(ipAddress)) { throw new InternalError("IP address not specified"); } Model model = new Model(); model.IPAddress = ipAddress; if (geoData) { GeoLocation geoLocation = new GeoLocation(); if (geoLocation.GetRemainingRequests() <= 0) { throw new Error(this.__ResStr("limitExceeded", "The current limit of geolocation requests per minute has been exceeded")); } GeoLocation.UserInfo info = await geoLocation.GetUserInfoAsync(ipAddress); ObjectSupport.CopyData(info, model); } try { IPHostEntry hostEntry = Dns.GetHostEntry(ipAddress); model.HostName = hostEntry.HostName; } catch { } return(View(model)); }
public async Task AddGeoLocationAsync(List <string> errorList) { using (VisitorEntryDataProvider visitorEntryDP = new VisitorEntryDataProvider()) { DateTime startTime = DateTime.UtcNow; int overall = 0; List <DataProviderFilterInfo> filters = null; filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo { Field = nameof(VisitorEntry.ContinentCode), Operator = "==", Value = VisitorEntry.Unknown }); filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo { Field = nameof(VisitorEntry.AccessDateTime), Operator = "<", Value = startTime }); GeoLocation geoLocation = new GeoLocation(); int maxRequest = geoLocation.GetRemainingRequests(); for (; maxRequest > 0; --maxRequest) { DataProviderGetRecords <VisitorEntry> list = await visitorEntryDP.GetItemsAsync(0, 1, null, filters); if (list.Data.Count == 0) { break; } VisitorEntry geoData = list.Data.First(); GeoLocation.UserInfo userInfo = await geoLocation.GetUserInfoAsync(geoData.IPAddress); if (!string.IsNullOrWhiteSpace(userInfo.ContinentCode)) { geoData.City = userInfo.City; geoData.ContinentCode = userInfo.ContinentCode; geoData.CountryCode = userInfo.CountryCode; geoData.RegionCode = userInfo.RegionCode; } else { geoData.City = ""; geoData.ContinentCode = ""; geoData.CountryCode = ""; geoData.RegionCode = ""; } await visitorEntryDP.UpdateSameIPAddressesAsync(geoData); ++overall; } Logging.AddLog($"Updated {overall} visitor entries"); } }