Пример #1
0
        /// <summary>
        /// Obtiene los datos de la ciudad de una ip
        /// </summary>
        /// <param name="ip">Ip de donde se conectan</param>
        /// <returns></returns>
        public async Task <DatosIPDTO> ObtenerDatosPorIpAsync(string ip)
        {
            HttpClient client  = new HttpClient();
            DatosIPDTO datosIP = new DatosIPDTO();

            var respuesta = await client.GetStringAsync($"{apiUrl}/?apiKey={apiKey}&ip={ip}&fields=geo,continent_name,organization");

            var datosGeo = JsonSerializer.Deserialize <IPGeoLocationDTO>(respuesta);

            datosIP.city         = datosGeo.City;
            datosIP.country      = datosGeo.CountryName;
            datosIP.continent    = datosGeo.ContinentName;
            datosIP.country_code = datosGeo.CountryCode2;
            datosIP.latitude     = datosGeo.Latitude;
            datosIP.longitude    = datosGeo.Longitude;
            datosIP.postal_code  = datosGeo.Zipcode;
            datosIP.subdivision  = datosGeo.StateProv;
            datosIP.subdivision2 = datosGeo.District;
            datosIP.org          = datosGeo.Organization;
            return(datosIP);
        }
Пример #2
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);
        }
Пример #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);
        }
Пример #4
0
        /// <summary>
        /// Envia correo cuando se entra al sistema de otra ciudad
        /// </summary>
        /// <param name="path">Ruta para los templates</param>
        /// <param name="usuario">Usuario</param>
        /// <param name="email">Email</param>
        /// <param name="datosIP">Datos de la ip</param>
        /// <param name="ip">Ip</param>
        /// <param name="navegador">Navegador</param>
        private void EnviaCorreoNuevoAcceso(string path, string usuario, string email, DatosIPDTO datosIP, string ip, string navegador)
        {
            string body = System.IO.File.ReadAllText(Path.Combine(path, "Templates", "NuevoAcceso.html"));

            body = body.Replace("{{usuario}}", usuario);
            body = body.Replace("{{ciudad}}", datosIP.city);
            body = body.Replace("{{estado}}", datosIP.subdivision);
            body = body.Replace("{{pais}}", datosIP.country);
            body = body.Replace("{{ip}}", ip);
            body = body.Replace("{{navegador}}", navegador);
            body = body.Replace("{{fecha}}", DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString());

            Correo mail = new Correo(Configuration)
            {
                Para    = email,
                Mensaje = body,
                Asunto  = "Nuevo acceso en " + datosIP.city
            };

            try
            {
                mail.Enviar();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.InnerException);
            }
        }