Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ You can have the library from Maven Central.
<dependency>
<groupId>co.ipdata.client</groupId>
<artifactId>ipdata-java-client</artifactId>
<version>0.1.0</version>
<version>0.1.1</version>
</dependency>
```

Expand Down
30 changes: 15 additions & 15 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>co.ipdata.client</groupId>
<artifactId>ipdata-java-client</artifactId>
<version>0.1.1-SNAPSHOT</version>
<version>0.1.1</version>
<description>A java client for ipdata.co</description>
<name>Ipdata java client</name>
<url>https://github.com/ipdata/java</url>
Expand All @@ -23,7 +23,7 @@
<connection>scm:git:git@github.com:ipdata/java.git</connection>
<developerConnection>scm:git:git@github.com:ipdata/java.git</developerConnection>
<url>https://github.com/ipdata/java</url>
<tag>ipdata-java-client-0.1.0</tag>
<tag>ipdata-java-0.1.1</tag>
</scm>
<distributionManagement>
<repository>
Expand All @@ -36,22 +36,22 @@
</snapshotRepository>
</distributionManagement>
<properties>
<sonar.projectName>ipdata-java-client</sonar.projectName>
<version.build.jacoco>0.8.4</version.build.jacoco>
<version.build.sonar>3.7.0.1746</version.build.sonar>
<maven.compiler.source>6</maven.compiler.source>
<maven.compiler.target>6</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<sonar.coverage.jacoco.xmlReportPaths>${project.build.directory}/site/code-coverage/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<sonar.projectVersion>${project.version}</sonar.projectVersion>
<sonar.links.homepage>https://github.com/ipdata/java</sonar.links.homepage>
<sonar.links.issue>https://github.com/ipdata/java</sonar.links.issue>
<sonar.links.scm>https://github.com/ipdata/java</sonar.links.scm>
<sonar.organization>yassine-github</sonar.organization>
<maven.compiler.target>6</maven.compiler.target>
<sonar.projectKey>yassine_ipdata-java-client</sonar.projectKey>
<sonar.projectName>ipdata-java-client</sonar.projectName>
<sonar.projectVersion>${project.version}</sonar.projectVersion>
<version.build.jacoco>0.8.4</version.build.jacoco>
<version.build.sonar>3.7.0.1746</version.build.sonar>
<version.build.surefire>3.0.0-M3</version.build.surefire>
<sonar.links.issue>https://github.com/yassine/ipdata-java-client</sonar.links.issue>
<version.client.feign>9.7.0</version.client.feign>
<sonar.links.scm>https://github.com/yassine/ipdata-java-client</sonar.links.scm>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<sonar.links.homepage>https://github.com/yassine/ipdata-java-client</sonar.links.homepage>
<sonar.coverage.jacoco.xmlReportPaths>${project.build.directory}/site/code-coverage/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
</properties>
<dependencies>
<dependency>
Expand Down Expand Up @@ -102,9 +102,9 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<version>1.5.0</version>
<groupId>net.javacrumbs.json-unit</groupId>
<artifactId>json-unit</artifactId>
<version>2.17.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/io/ipdata/client/Ipdata.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
import org.slf4j.Logger;

@UtilityClass
public final class Ipdata {
public class Ipdata {

public static Ipdata.Builder builder() {
public Ipdata.Builder builder() {
return new Builder();
}

Expand Down Expand Up @@ -53,10 +53,11 @@ public static class Builder {

/**
* Overrides current cache config with null (no caching).
*
* @return this
*/
public Builder noCache(){
this .cacheConfig = null;
public Builder noCache() {
this.cacheConfig = null;
return this;
}

Expand Down
8 changes: 8 additions & 0 deletions src/main/java/io/ipdata/client/model/AsnModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,13 @@ public class AsnModel {
private String name;
private String domain;
private String route;
private String type;

/**
* Deprecated
*
* @deprecated : See: https://github.com/ipdata/java/issues/2
*/
@Deprecated
private String isp;
}
16 changes: 13 additions & 3 deletions src/main/java/io/ipdata/client/model/IpdataModel.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package io.ipdata.client.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.List;

@Setter(AccessLevel.PACKAGE)
@ToString
@Getter
Expand All @@ -17,11 +18,13 @@ public class IpdataModel {
@JsonProperty("is_eu")
private boolean eu;
private String city;
private String organization;
private String organisation;

private String region;
private String regionCode;
private String countryName;
private String countryCode;
private String continentName;
private String continentCode;
private double latitude;
private double longitude;
Expand All @@ -37,7 +40,14 @@ public class IpdataModel {
private TimeZone timeZone;
private ThreatModel threat;
//meta
private int count;
private String count;

/**
* Rely on organisation field instead.
* @deprecated Use organisation instead
*/
@Deprecated
private String organization;

public boolean isEu() {
return eu;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/ipdata/client/model/Language.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ public class Language {
private String name;
@JsonProperty("native")
private String nativeName;
private boolean rtl;
private int rtl;
}
6 changes: 4 additions & 2 deletions src/main/java/io/ipdata/client/model/TimeZone.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.ipdata.client.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.ToString;
import lombok.experimental.Accessors;
Expand All @@ -10,6 +11,7 @@ public class TimeZone {
private String name;
private String abbr;
private String offset;
private String isDst;
private String currencyTime;
@JsonProperty("is_dst")
private boolean dst;
private String currentTime;
}
8 changes: 5 additions & 3 deletions src/main/java/io/ipdata/client/service/ApiErrorDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@
import io.ipdata.client.error.RateLimitException;
import io.ipdata.client.error.RemoteIpdataException;
import io.ipdata.client.model.Error;
import java.io.IOException;
import java.net.URL;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;

@RequiredArgsConstructor @Slf4j
import java.io.IOException;
import java.net.URL;

@RequiredArgsConstructor
@Slf4j
public class ApiErrorDecoder implements ErrorDecoder {
private static final int RATE_LIMIT_STATUS = 403;
private final ObjectMapper mapper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,34 @@
import com.google.common.io.CharStreams;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import java.io.InputStreamReader;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@RequiredArgsConstructor @Slf4j
import java.io.InputStreamReader;

@RequiredArgsConstructor
@Slf4j
class ApiKeyRequestInterceptor implements RequestInterceptor {

private static final String API_KEY_PARAM = "api-key";
private static final String ACCEPT_HEADER = "Accept";
private static final String JSON_CONTENT = "application/json";
private static final String JSON_CONTENT = "application/json";
private static final String API_CLIENT_HEADER = "User-Agent";
private static final String API_CLIENT_VALUE;

static {
String version;
try {
version = CharStreams.toString(new InputStreamReader(ApiKeyRequestInterceptor.class
.getResourceAsStream("/io/ipdata/client/VERSION"))).replaceAll("\\n","");
version = String.format("io.ipdata.client.java.%s", version);
}catch (Exception e){
.getResourceAsStream("/io/ipdata/client/VERSION"))).replaceAll("\\n", "");
version = String.format("io.ipdata.client.java.%s", version);
} catch (Exception e) {
log.error(e.getMessage(), e);
version = "io.ipdata.client.java.UNKNOWN";
version = "io.ipdata.client.java.UNKNOWN";
}
API_CLIENT_VALUE = version;
}

private final String key;

@Override
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/io/ipdata/client/service/CacheConfig.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package io.ipdata.client.service;

import java.util.concurrent.TimeUnit;
import lombok.Builder;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;

import java.util.concurrent.TimeUnit;

@RequiredArgsConstructor
@Builder
@Getter
Expand Down
43 changes: 17 additions & 26 deletions src/main/java/io/ipdata/client/service/CachingInternalClient.java
Original file line number Diff line number Diff line change
@@ -1,42 +1,33 @@
package io.ipdata.client.service;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.cache.LoadingCache;
import io.ipdata.client.error.IpdataException;
import io.ipdata.client.model.AsnModel;
import io.ipdata.client.model.Currency;
import io.ipdata.client.model.IpdataModel;
import io.ipdata.client.model.ThreatModel;
import io.ipdata.client.model.TimeZone;
import io.ipdata.client.model.*;
import lombok.Builder;
import lombok.experimental.Delegate;

import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import lombok.Builder;
import lombok.experimental.Delegate;

@Builder
@VisibleForTesting

public class CachingInternalClient implements IpdataInternalClient, IpdataInternalSingleFieldClient {
class CachingInternalClient implements IpdataInternalClient, IpdataInternalSingleFieldClient {

@Builder.Default
@SuppressWarnings("UnusedAssignment") //required by lombok builder
private int expiry = 4;
private final int expiry = 4;
@Builder.Default
@SuppressWarnings("UnusedAssignment") //required by lombok builder
private TimeUnit unit = TimeUnit.HOURS;
private final TimeUnit unit = TimeUnit.HOURS;
@Builder.Default
@SuppressWarnings("UnusedAssignment") //required by lombok builder
private Long maxSize = Long.MAX_VALUE;
private IpdataInternalClient ipdataInternalClient;
private IpdataInternalSingleFieldClient ipdataInternalSingleFieldClient;

private LoadingCache<String, IpdataModel> ipdataCache;
private LoadingCache<HashPair<String, String>, IpdataModel> fieldsCache;
private LoadingCache<String, AsnModel> asnCache;
private LoadingCache<String, TimeZone> tzCache;
private LoadingCache<String, Currency> currencyCache;
private LoadingCache<String, ThreatModel> threatCache;
private final Long maxSize = Long.MAX_VALUE;
private final IpdataInternalClient ipdataInternalClient;
private final IpdataInternalSingleFieldClient ipdataInternalSingleFieldClient;

private final LoadingCache<String, IpdataModel> ipdataCache;
private final LoadingCache<HashPair<String, String>, IpdataModel> fieldsCache;
private final LoadingCache<String, AsnModel> asnCache;
private final LoadingCache<String, TimeZone> tzCache;
private final LoadingCache<String, Currency> currencyCache;
private final LoadingCache<String, ThreatModel> threatCache;

@Override
public IpdataModel getFields(String ip, String fields) throws IpdataException {
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/io/ipdata/client/service/FieldDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
import com.google.common.io.CharStreams;
import feign.Response;
import feign.codec.Decoder;
import lombok.RequiredArgsConstructor;

import java.io.IOException;
import java.lang.reflect.Type;
import lombok.RequiredArgsConstructor;

/**
* The API returns usable but invalid(/unquoted) strings for String fields
Expand Down
6 changes: 1 addition & 5 deletions src/main/java/io/ipdata/client/service/IpdataField.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package io.ipdata.client.service;

import io.ipdata.client.model.AsnModel;
import io.ipdata.client.model.Carrier;
import io.ipdata.client.model.Currency;
import io.ipdata.client.model.Language;
import io.ipdata.client.model.TimeZone;
import io.ipdata.client.model.*;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import feign.RequestLine;
import io.ipdata.client.error.IpdataException;
import io.ipdata.client.model.IpdataModel;

import java.util.List;

@SuppressWarnings("RedundantThrows")
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/ipdata/client/service/IpdataService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import io.ipdata.client.error.IpdataException;
import io.ipdata.client.model.IpdataModel;

import java.util.List;

@SuppressWarnings("RedundantThrows")
public interface IpdataService extends IpdataInternalSingleFieldClient {

IpdataModel ipdata(String ip) throws IpdataException;
Expand Down
13 changes: 5 additions & 8 deletions src/main/java/io/ipdata/client/service/IpdataServiceBuilder.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package io.ipdata.client.service;

import static com.fasterxml.jackson.databind.PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.PropertyAccessor;
Expand All @@ -14,16 +12,15 @@
import feign.httpclient.ApacheHttpClient;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import io.ipdata.client.model.AsnModel;
import io.ipdata.client.model.Currency;
import io.ipdata.client.model.IpdataModel;
import io.ipdata.client.model.ThreatModel;
import io.ipdata.client.model.TimeZone;
import java.net.URL;
import io.ipdata.client.model.*;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.URL;

import static com.fasterxml.jackson.databind.PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES;

@RequiredArgsConstructor(staticName = "of")
public class IpdataServiceBuilder {

Expand Down
Loading