Esempio n. 1
0
        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");
            }
        }