/// <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); }
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}"); } }
/// <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); }