Ejemplo n.º 1
0
        public async Task TackUserIpAddress(Guid siteId, Guid userGuid)
        {
            if (context == null)
            {
                return;
            }
            if (userGuid == Guid.Empty)
            {
                return;
            }

            try
            {
                var connection = context.Connection;
                if (connection == null)
                {
                    return;
                }
                var ip = connection.RemoteIpAddress;
                if (ip == null)
                {
                    return;
                }
                var ipv4 = ip.MapToIPv4();

                string ipv4Address = ipv4.ToString();
                //Connection.RemoteIpAddress.MapToIPv4().ToLong()

                if (string.IsNullOrEmpty(ipv4Address))
                {
                    return;
                }
                long ip4aslong = ipv4.ToLong();
                if (ip4aslong == 0)
                {
                    return;
                }

                //string hostName = context.Connection.
                //doesnt seem a good way to get client host name but that doesn't often have any meaning value anyway

                var userLocation = await queries.FetchLocationByUserAndIpv4Address(siteId, userGuid, ip4aslong, CancellationToken);

                if (userLocation == null)
                {
                    userLocation                 = new UserLocation();
                    userLocation.SiteId          = siteId;
                    userLocation.UserId          = userGuid;
                    userLocation.IpAddress       = ipv4Address;
                    userLocation.IpAddressLong   = ip4aslong;
                    userLocation.FirstCaptureUtc = DateTime.UtcNow;
                    userLocation.LastCaptureUtc  = userLocation.FirstCaptureUtc;
                    userLocation.CaptureCount    = 1;
                    await commands.AddUserLocation(userLocation, CancellationToken.None)
                    .ConfigureAwait(false);
                }
                else
                {
                    userLocation.LastCaptureUtc = DateTime.UtcNow;
                    userLocation.CaptureCount  += 1;
                    await commands.UpdateUserLocation(userLocation, CancellationToken.None)
                    .ConfigureAwait(false);
                }
            }
            catch (Exception ex)
            {
                log.LogError("error in iptracker", ex);
            }
        }
Ejemplo n.º 2
0
        //private readonly HttpContext context;
        //private CancellationToken CancellationToken => context?.RequestAborted ?? CancellationToken.None;

        public async Task TackUserIpAddress(Guid siteId, Guid userGuid)
        {
            if (_contextAccessor == null)
            {
                return;
            }
            if (userGuid == Guid.Empty)
            {
                return;
            }

            try
            {
                if ((_contextAccessor == null) || (_contextAccessor.HttpContext == null))
                {
                    return;
                }

                var connection = _contextAccessor.HttpContext.Features.Get <IHttpConnectionFeature>();
                if (connection == null)
                {
                    return;
                }

                var ip = connection.RemoteIpAddress;
                if (ip == null)
                {
                    return;
                }
                var    ipv4        = ip.MapToIPv4();
                string ipv4Address = ipv4.ToString();
                if (string.IsNullOrEmpty(ipv4Address))
                {
                    return;
                }
                long ip4aslong = ipv4.ToLong();
                if (ip4aslong == 0)
                {
                    return;
                }

                var userLocation = await _queries.FetchLocationByUserAndIpv4Address(siteId, userGuid, ip4aslong, CancellationToken.None);

                if (userLocation == null)
                {
                    userLocation = new UserLocation
                    {
                        SiteId          = siteId,
                        UserId          = userGuid,
                        IpAddress       = ipv4Address,
                        IpAddressLong   = ip4aslong,
                        FirstCaptureUtc = DateTime.UtcNow
                    };
                    userLocation.LastCaptureUtc = userLocation.FirstCaptureUtc;
                    userLocation.CaptureCount   = 1;
                    await _commands.AddUserLocation(userLocation, CancellationToken.None)
                    .ConfigureAwait(false);
                }
                else
                {
                    userLocation.LastCaptureUtc = DateTime.UtcNow;
                    userLocation.CaptureCount  += 1;
                    await _commands.UpdateUserLocation(userLocation, CancellationToken.None)
                    .ConfigureAwait(false);
                }
            }
            catch (Exception ex)
            {
                _log.LogError("error in iptracker: " + ex.Message + " stacktrace: " + ex.StackTrace);
            }
        }