package com.maxmind.geoip2.record; import com.fasterxml.jackson.annotation.JacksonInject; import com.fasterxml.jackson.annotation.JsonProperty; import com.maxmind.geoip2.model.ConnectionTypeResponse.ConnectionType; /** * <p> * Contains data for the traits record associated with an IP address. * </p> * <p> * This record is returned by all the end points. * </p> */ public final class Traits extends AbstractRecord { private final Integer autonomousSystemNumber; private final String autonomousSystemOrganization; private final ConnectionType connectionType; private final String domain; private final String ipAddress; private final boolean isAnonymousProxy; private final boolean isSatelliteProvider; private final String isp; private final String organization; private final String userType; private final boolean isLegitimateProxy; public Traits() { this(null, null, null, null, false, false, null, null, null); } public Traits(String ipAddress) { this(null, null, null, ipAddress, false, false, null, null, null); } // This is for back-compat. If we ever do a major release, it should be // removed. public Traits( Integer autonomousSystemNumber, String autonomousSystemOrganization, String domain, String ipAddress, boolean isAnonymousProxy, boolean isSatelliteProvider, String isp, String organization, String userType ) { this(autonomousSystemNumber, autonomousSystemOrganization, null, domain, ipAddress, isAnonymousProxy, false, isSatelliteProvider, isp, organization, userType); } public Traits( @JsonProperty("autonomous_system_number") Integer autonomousSystemNumber, @JsonProperty("autonomous_system_organization") String autonomousSystemOrganization, @JsonProperty("connection_type") ConnectionType connectionType, @JsonProperty("domain") String domain, @JacksonInject("ip_address") @JsonProperty("ip_address") String ipAddress, @JsonProperty("is_anonymous_proxy") boolean isAnonymousProxy, @JsonProperty("is_legitimate_proxy") boolean isLegitimateProxy, @JsonProperty("is_satellite_provider") boolean isSatelliteProvider, @JsonProperty("isp") String isp, @JsonProperty("organization") String organization, @JsonProperty("user_type") String userType ) { this.autonomousSystemNumber = autonomousSystemNumber; this.autonomousSystemOrganization = autonomousSystemOrganization; this.connectionType = connectionType; this.domain = domain; this.ipAddress = ipAddress; this.isAnonymousProxy = isAnonymousProxy; this.isLegitimateProxy = isLegitimateProxy; this.isSatelliteProvider = isSatelliteProvider; this.isp = isp; this.organization = organization; this.userType = userType; } /** * @return The <a * href="http://en.wikipedia.org/wiki/Autonomous_system_(Internet)" * >autonomous system number</a> associated with the IP address. * This attribute is only available from the City and Insights web * service end points and the GeoIP2 Enterprise database. */ @JsonProperty("autonomous_system_number") public Integer getAutonomousSystemNumber() { return this.autonomousSystemNumber; } /** * @return The organization associated with the registered <a * href="http://en.wikipedia.org/wiki/Autonomous_system_(Internet)" * >autonomous system number</a> for the IP address. This attribute * is only available from the City and Insights web service end * points and the GeoIP2 Enterprise database. */ @JsonProperty("autonomous_system_organization") public String getAutonomousSystemOrganization() { return this.autonomousSystemOrganization; } /** * @return The connection type of the IP address. This attribute is only * available in the GeoIP2 Enterprise database. */ @JsonProperty("connection_type") public ConnectionType getConnectionType() { return this.connectionType; } /** * @return The second level domain associated with the IP address. This will * be something like "example.com" or "example.co.uk", not * "foo.example.com". This attribute is only available from the City * and Insights web service end points and the GeoIP2 Enterprise database. */ @JsonProperty public String getDomain() { return this.domain; } /** * @return The IP address that the data in the model is for. If you * performed a "me" lookup against the web service, this will be the * externally routable IP address for the system the code is running * on. If the system is behind a NAT, this may differ from the IP * address locally assigned to it. This attribute is returned by all * end points. */ @JsonProperty("ip_address") public String getIpAddress() { return this.ipAddress; } /** * @return The name of the ISP associated with the IP address. This * attribute is only available from the City and Insights web * service end points and the GeoIP2 Enterprise database. */ public String getIsp() { return this.isp; } /** * @return This is true if the IP is an anonymous proxy. This attribute is * returned by all end points. * @see <a href="http://dev.maxmind.com/faq/geoip#anonproxy">MaxMind's GeoIP * FAQ</a> * @deprecated Use our * <a href="https://www.maxmind.com/en/geoip2-anonymous-ip-database">GeoIP2 * Anonymous IP database</a> instead. */ @Deprecated @JsonProperty("is_anonymous_proxy") public boolean isAnonymousProxy() { return this.isAnonymousProxy; } /** * @return True if MaxMind believes this IP address to be a legitimate * proxy, such as an internal VPN used by a corporation. This is only * available in the GeoIP2 Enterprise database. */ @JsonProperty("is_legitimate_proxy") public boolean isLegitimateProxy() { return this.isLegitimateProxy; } /** * @return This is true if the IP belong to a satellite Internet provider. * This attribute is returned by all end points. * @deprecated Due to increased mobile usage, we have insufficient data to * maintain this field. */ @Deprecated @JsonProperty("is_satellite_provider") public boolean isSatelliteProvider() { return this.isSatelliteProvider; } /** * @return The name of the organization associated with the IP address. This * attribute is only available from the City and Insights web * service end points and the GeoIP2 Enterprise database. */ @JsonProperty public String getOrganization() { return this.organization; } /** * @return <p> * The user type associated with the IP address. This can be one of * the following values: * </p> * <ul> * <li>business * <li>cafe * <li>cellular * <li>college * <li>content_delivery_network * <li>dialup * <li>government * <li>hosting * <li>library * <li>military * <li>residential * <li>router * <li>school * <li>search_engine_spider * <li>traveler * </ul> * <p> * This attribute is only available from the Insights end point and the * GeoIP2 Enterprise database. * </p> */ @JsonProperty("user_type") public String getUserType() { return this.userType; } }