Пример #1
0
        public async Task CountRedirect(ShortLinkModel shortLink, bool disableTracking)
        {
            var addr = HttpContext.Connection.RemoteIpAddress;

            bool isUnique = true;

            if (IPCache.Contains(addr))
            {
                var guid = IPCache.Get(addr);
                isUnique = !guid.HasValue || guid.Value != shortLink.GUID;
            }

            //Db.ShortLinks.Update(shortLink);

            var ipInfoToken = Configuration.GetSection("secrets")?.GetValue <string>("ipinfotoken");
            var ipInfo      = new IPInfoModel();

            if (!ipInfoToken.IsEmpty())
            {
                try
                {
                    ipInfo = await IPInfo.GetInfo(addr, ipInfoToken);
                }
                catch (Exception e)
                {
                    Logger.LogError("Failed getting IPInfo: ", e);
                }
            }
            else
            {
                Logger.LogWarning("IPInfo could not be collected because no IPInfo API token was provided");
            }

            var access = new AccessModel()
            {
                ShortLinkGUID = shortLink.GUID,
                IsUnique      = isUnique,
                Timestamp     = DateTime.Now,
            };


            if (!disableTracking)
            {
                access.ShortLinkGUID = shortLink.GUID;
                access.City          = ipInfo.City;
                access.Country       = ipInfo.Country;
                access.IsUnique      = isUnique;
                access.Org           = ipInfo.Org;
                access.Postal        = ipInfo.Postal;
                access.Region        = ipInfo.Region;
                access.Timestamp     = DateTime.Now;
                access.Timezone      = ipInfo.Timezone;
                access.UserAgent     = HttpContext.Request.Headers["User-Agent"].ToString();
            }

            DbCache.AddAccess(access);

            if (isUnique)
            {
                IPCache.Push(addr, shortLink.GUID);
            }

            //await Db.SaveChangesAsync();
        }