Beispiel #1
0
        /// <summary>
        /// Revisa si la ip del usuario pertenece a una ciudad diferente
        /// al historial de ciudades de donde se conecta el usuario
        /// </summary>
        /// <param name="ip">Ip de la cual se conecta el usuario</param>
        /// <param name="usuarioId">Id del usuario</param>
        /// <returns></returns>
        public async Task <bool> EsOtraCiudadAsync(string ip, int usuarioId)
        {
            IPGeoLocation ipGeoLocation = new IPGeoLocation();

            //Obtenemos los datos de la ip

            datosIP = await this.ObtenerDatosIPAsync(ip, ipGeoLocation);

            //Revisamos si ya registro algún acceso, si no tiene
            //accesos no se debe enviar ningún correo
            var acceso = contexto.UsuarioAcceso.FirstOrDefault(u => u.UsuarioId == usuarioId);

            if (acceso == null)
            {
                return(false);
            }
            //Revisamos si tiene un registro en otra ciudad
            acceso = contexto.UsuarioAcceso.FirstOrDefault(u => u.UsuarioId == usuarioId &&
                                                           u.Ciudad != datosIP.city);
            //Si ya tiene un acceso para esa ciudad regresamos false
            return(acceso != null);
        }
Beispiel #2
0
        public static void ProcessIPInfo(string json)
        {
            try
            {
                IPGeoLocation info = JsonConvert.DeserializeObject <IPGeoLocation>(json);
                IPInfo.GeoInfoList.Clear();

                if (string.Equals(info.Status, "success", StringComparison.OrdinalIgnoreCase))
                {
                    IPInfo.GeoInfoList.Add(new IPInfo("External IP Address", info.IpAddress));
                    IPInfo.GeoInfoList.Add(new IPInfo("City", info.City));
                    IPInfo.GeoInfoList.Add(new IPInfo("State", info.State));
                    IPInfo.GeoInfoList.Add(new IPInfo("Zip Code", info.Zip));
                    IPInfo.GeoInfoList.Add(new IPInfo("Country", info.Country));
                    IPInfo.GeoInfoList.Add(new IPInfo("Continent", info.Continent));
                    IPInfo.GeoInfoList.Add(new IPInfo("Longitude", info.Lon.ToString()));
                    IPInfo.GeoInfoList.Add(new IPInfo("Latitude", info.Lat.ToString()));
                    IPInfo.GeoInfoList.Add(new IPInfo("Time Zone", info.Timezone));
                    IPInfo.GeoInfoList.Add(new IPInfo("UTC Offset", ConvertOffset(info.Offset)));
                    IPInfo.GeoInfoList.Add(new IPInfo("ISP", info.Isp));
                }
                else
                {
                    IPInfo.GeoInfoList.Add(new IPInfo("Status", info.Status));
                    IPInfo.GeoInfoList.Add(new IPInfo("Message", info.Message));
                }
            }
            catch (Exception ex)
            {
                log.Error(ex, "Error parsing JSON");
                IPInfo.GeoInfoList.Add(new IPInfo("Error", "Error parsing JSON. See log file."));
            }

            foreach (IPInfo item in IPInfo.GeoInfoList)
            {
                log.Debug($"{item.Parameter} is {item.Value}");
            }
        }
Beispiel #3
0
        /// <summary>
        /// Guarda los datos del acceso del usuario
        /// </summary>
        /// <param name="token">Datos del token</param>
        /// <param name="usuarioId">Id del usuario</param>
        /// <param name="ip">Ip de la cual se conecta el usuario</param>
        /// <param name="navegador">Navegador del cual se conecta el usuario</param>
        /// <returns></returns>
        public async Task <bool> GuardarAccesoAsync(TokenDTO token, int usuarioId, string ip, string navegador)
        {
            IPGeoLocation ipGeoLocation = new IPGeoLocation();

            if (datosIP == null)
            {
                datosIP = await ObtenerDatosIPAsync(ip, ipGeoLocation);
            }
            var usuarioAcceso = new UsuarioAcceso();

            usuarioAcceso.Ciudad           = datosIP.city;
            usuarioAcceso.Estado           = datosIP.subdivision;
            usuarioAcceso.Navegador        = navegador;
            usuarioAcceso.UsuarioId        = usuarioId;
            usuarioAcceso.Fecha            = DateTime.Now;
            usuarioAcceso.Token            = token.Token.Split(".")[2];
            usuarioAcceso.Activo           = true;
            usuarioAcceso.SistemaOperativo = "Default";
            usuarioAcceso.RefreshToken     = token.RefreshToken;
            usuarioAcceso.Navegador        = "Default";
            contexto.UsuarioAcceso.Add(usuarioAcceso);
            contexto.SaveChanges();
            return(true);
        }