Search in sources :

Example 21 with Country

use of com.maxmind.geoip2.record.Country in project graylog2-server by Graylog2.

the class MaxmindDataAdapter method doGet.

@Override
protected LookupResult doGet(Object key) {
    final InetAddress addr;
    if (key instanceof InetAddress) {
        addr = (InetAddress) key;
    } else {
        // try to convert it somehow
        try {
            addr = InetAddresses.forString(key.toString());
        } catch (IllegalArgumentException e) {
            LOG.warn("Unable to parse IP address, returning empty result.");
            return LookupResult.empty();
        }
    }
    final IPLocationDatabaseAdapter reader = this.databaseAdapter.get();
    switch(config.dbType()) {
        case MAXMIND_CITY:
            try {
                final CityResponse city = reader.maxMindCity(addr);
                if (city == null) {
                    LOG.debug("No city data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                final Location location = city.getLocation();
                final Map<Object, Object> map = new HashMap<>();
                map.put("city", city.getCity());
                map.put("continent", city.getContinent());
                map.put("country", city.getCountry());
                map.put("location", location);
                map.put("postal", city.getPostal());
                map.put("registered_country", city.getRegisteredCountry());
                map.put("represented_country", city.getRepresentedCountry());
                map.put("subdivisions", city.getSubdivisions());
                map.put("traits", city.getTraits());
                final String singleValue;
                if (location == null || location.getLatitude() == null || location.getLongitude() == null) {
                    singleValue = null;
                } else {
                    singleValue = location.getLatitude() + "," + location.getLongitude();
                    map.put("coordinates", singleValue);
                }
                return LookupResult.multi(singleValue, map);
            } catch (AddressNotFoundException nfe) {
                LOG.debug("Unable to look up city data for IP address {}, returning empty result.", addr, nfe);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up city data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
        case MAXMIND_COUNTRY:
            try {
                final CountryResponse countryResponse = reader.maxMindCountry(addr);
                if (countryResponse == null) {
                    LOG.debug("No country data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                final Country country = countryResponse.getCountry();
                final Map<Object, Object> map = new HashMap<>();
                map.put("continent", countryResponse.getContinent());
                map.put("country", country);
                map.put("registered_country", countryResponse.getRegisteredCountry());
                map.put("represented_country", countryResponse.getRepresentedCountry());
                map.put("traits", countryResponse.getTraits());
                final String singleValue = country == null ? null : country.getIsoCode();
                return LookupResult.multi(singleValue, map);
            } catch (AddressNotFoundException nfe) {
                LOG.debug("Unable to look up country data for IP address {}, returning empty result.", addr, nfe);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up country data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
        case MAXMIND_ASN:
            try {
                final AsnResponse asn = reader.maxMindASN(addr);
                if (asn == null) {
                    LOG.debug("No ASN data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                final ImmutableMap<Object, Object> map = ImmutableMap.of("as_number", asn.getAutonomousSystemNumber(), "as_organization", asn.getAutonomousSystemOrganization());
                return LookupResult.multi(asn.getAutonomousSystemNumber(), map);
            } catch (AddressNotFoundException nfe) {
                LOG.debug("Unable to look up ASN data for IP address {}, returning empty result.", addr, nfe);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up ASN data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
        case IPINFO_ASN:
            try {
                final IPinfoASN ipInfo = reader.ipInfoASN(addr);
                if (ipInfo == null) {
                    LOG.debug("No IPinfo location data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                // Values can be null so we cannot use an ImmutableMap here
                final Map<Object, Object> multiValue = new HashMap<>();
                multiValue.put("asn", ipInfo.asn());
                multiValue.put("asn_numeric", ipInfo.asnNumeric());
                multiValue.put("name", ipInfo.name());
                multiValue.put("domain", ipInfo.domain());
                multiValue.put("type", ipInfo.type());
                multiValue.put("route", ipInfo.route());
                return LookupResult.multi(ipInfo.asnNumeric(), Collections.unmodifiableMap(multiValue));
            } catch (AddressNotFoundException e) {
                LOG.debug("Unable to look up IPinfo ASN data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up IPinfo ASN data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
        case IPINFO_STANDARD_LOCATION:
            try {
                final IPinfoStandardLocation ipInfo = reader.ipInfoStandardLocation(addr);
                if (ipInfo == null) {
                    LOG.debug("No IPinfo location data for IP address {}, returning empty result.", addr);
                    return LookupResult.empty();
                }
                // Values can be null so we cannot use an ImmutableMap here
                final Map<Object, Object> multiValue = new HashMap<>();
                multiValue.put("coordinates", ipInfo.coordinates());
                multiValue.put("latitude", ipInfo.latitude());
                multiValue.put("longitude", ipInfo.longitude());
                multiValue.put("city", ipInfo.city());
                multiValue.put("country", ipInfo.country());
                multiValue.put("region", ipInfo.region());
                multiValue.put("timezone", ipInfo.timezone());
                multiValue.put("geoname_id", ipInfo.geoNameId());
                return LookupResult.multi(ipInfo.coordinates(), Collections.unmodifiableMap(multiValue));
            } catch (AddressNotFoundException e) {
                LOG.debug("Unable to look up IPinfo location data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            } catch (Exception e) {
                LOG.warn("Unable to look up IPinfo location data for IP address {}, returning empty result.", addr, e);
                return LookupResult.empty();
            }
    }
    return LookupResult.empty();
}
Also used : HashMap(java.util.HashMap) IOException(java.io.IOException) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException) CityResponse(com.maxmind.geoip2.model.CityResponse) AsnResponse(com.maxmind.geoip2.model.AsnResponse) AddressNotFoundException(com.maxmind.geoip2.exception.AddressNotFoundException) Country(com.maxmind.geoip2.record.Country) CountryResponse(com.maxmind.geoip2.model.CountryResponse) InetAddress(java.net.InetAddress) Location(com.maxmind.geoip2.record.Location)

Example 22 with Country

use of com.maxmind.geoip2.record.Country in project cas by apereo.

the class MaxmindDatabaseGeoLocationServiceTests method verifyCity.

@Test
public void verifyCity() throws Exception {
    val cityReader = mock(DatabaseReader.class);
    val cityResponse = new CityResponse(new City(), new Continent(), new Country(), new Location(10, 100, 40D, 70D, 1, 1, "UTC"), new MaxMind(), new Postal(), new Country(), new RepresentedCountry(), new ArrayList<>(), new Traits());
    when(cityReader.city(any())).thenReturn(cityResponse);
    val service = new MaxmindDatabaseGeoLocationService(cityReader, null);
    val response = service.locate("127.0.0.1");
    assertNotNull(response);
}
Also used : lombok.val(lombok.val) CityResponse(com.maxmind.geoip2.model.CityResponse) Continent(com.maxmind.geoip2.record.Continent) MaxMind(com.maxmind.geoip2.record.MaxMind) RepresentedCountry(com.maxmind.geoip2.record.RepresentedCountry) RepresentedCountry(com.maxmind.geoip2.record.RepresentedCountry) Country(com.maxmind.geoip2.record.Country) City(com.maxmind.geoip2.record.City) Postal(com.maxmind.geoip2.record.Postal) Traits(com.maxmind.geoip2.record.Traits) Location(com.maxmind.geoip2.record.Location) Test(org.junit.jupiter.api.Test)

Aggregations

CityResponse (com.maxmind.geoip2.model.CityResponse)12 Country (com.maxmind.geoip2.record.Country)11 AddressNotFoundException (com.maxmind.geoip2.exception.AddressNotFoundException)10 Location (com.maxmind.geoip2.record.Location)9 IOException (java.io.IOException)9 InetAddress (java.net.InetAddress)8 CountryResponse (com.maxmind.geoip2.model.CountryResponse)7 City (com.maxmind.geoip2.record.City)7 Continent (com.maxmind.geoip2.record.Continent)7 UnknownHostException (java.net.UnknownHostException)7 HashMap (java.util.HashMap)6 GeoIp2Exception (com.maxmind.geoip2.exception.GeoIp2Exception)5 Postal (com.maxmind.geoip2.record.Postal)5 RepresentedCountry (com.maxmind.geoip2.record.RepresentedCountry)4 Subdivision (com.maxmind.geoip2.record.Subdivision)4 GeoDef (com.quickutil.platform.def.GeoDef)4 JsonObject (com.google.gson.JsonObject)3 Traits (com.maxmind.geoip2.record.Traits)3 User (com.earth2me.essentials.User)2 MaxMind (com.maxmind.geoip2.record.MaxMind)2