Skip to content
This repository has been archived by the owner on Sep 26, 2020. It is now read-only.

Commit

Permalink
Merge pull request #34 from fullcontact/email-verification
Browse files Browse the repository at this point in the history
Email verification
  • Loading branch information
ParisMi committed Dec 16, 2016
2 parents 70c7e3e + 169a618 commit 940403b
Show file tree
Hide file tree
Showing 12 changed files with 431 additions and 11 deletions.
2 changes: 0 additions & 2 deletions README.md
@@ -1,5 +1,3 @@
[![Build Status](https://travis-ci.org/fullcontact/fullcontact4j.png)](https://travis-ci.org/fullcontact/fullcontact4j)

#FullContact4j

A Java client for the [FullContact API](http://www.fullcontact.com/docs).
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -7,7 +7,7 @@
<groupId>com.fullcontact</groupId>
<artifactId>fullcontact4j</artifactId>
<name>FullContact Java Bindings</name>
<version>3.2.2</version>
<version>3.3.0</version>
<dependencies>

<dependency>
Expand Down
Expand Up @@ -19,6 +19,9 @@ public class FCConstants {
public static final String API_ENDPOINT_LOCATION_NORMALIZER = "/address/locationNormalizer.json";
public static final String API_ENDPOINT_LOCATION_ENRICHMENT = "/address/locationEnrichment.json";
public static final String API_ENDPOINT_ACCOUNT_STATS = "/stats.json";
public static final String API_ENDPOINT_EMAIL_VERIFICATION = "/verification/email.json";
public static final String API_ENDPOINT_EMAIL_VERIFICATION_SUBMIT_BATCH = "/verification/emails.json";
public static final String API_ENDPOINT_EMAIL_VERIFICATION_GET_BATCH = "/verification/emails/{batchId}";

public static final String HEADER_RATE_LIMIT_PER_MINUTE = "X-Rate-Limit-Limit";
public static final String HEADER_RATE_LIMIT_REMAINING = "X-Rate-Limit-Remaining";
Expand Down
Expand Up @@ -10,6 +10,7 @@
import com.fullcontact.api.libs.fullcontact4j.http.cardreader.CardReaderViewAllRequest;
import com.fullcontact.api.libs.fullcontact4j.http.cardreader.CardReaderViewRequest;
import com.fullcontact.api.libs.fullcontact4j.http.company.CompanyRequest;
import com.fullcontact.api.libs.fullcontact4j.http.email.*;
import com.fullcontact.api.libs.fullcontact4j.http.location.LocationEnrichmentRequest;
import com.fullcontact.api.libs.fullcontact4j.http.location.LocationNormalizationRequest;
import com.fullcontact.api.libs.fullcontact4j.http.misc.AccountStatsRequest;
Expand Down Expand Up @@ -137,6 +138,25 @@ public static Builder withApiKey(String apiKey) {
*/
public AccountStatsRequest.Builder buildAccountStatsRequest() { return new AccountStatsRequest.Builder(); }

/**
* Creates a new Email Verification request.
*/
public EmailVerificationRequest.Builder buildEmailVerificationRequest() { return new EmailVerificationRequest.Builder(); }

/**
* Creates a new Email Verification Batch Submit request.
*/
public EmailVerificationBatchRequest.Builder buildEmailVerificationBatchRequest() {
return new EmailVerificationBatchRequest.Builder();
}

/**
* Creates a new Email Verification Batch Get request.
*/
public EmailVerificationGetBatchRequest.Builder buildEmailVerificationGetBatchRequest() {
return new EmailVerificationGetBatchRequest.Builder();
}

/**
* Makes a synchronous request to the FullContact APIs.
* @throws FullContactException if the request fails, this method will throw a FullContactException with a reason.
Expand Down
@@ -1,18 +1,13 @@
package com.fullcontact.api.libs.fullcontact4j;

import com.fullcontact.api.libs.fullcontact4j.http.cardreader.CardReaderFullResponse;
import com.fullcontact.api.libs.fullcontact4j.http.cardreader.CardReaderUploadConfirmResponse;
import com.fullcontact.api.libs.fullcontact4j.http.cardreader.CardReaderUploadRequest;
import com.fullcontact.api.libs.fullcontact4j.http.cardreader.CardReaderViewAllResponse;
import com.fullcontact.api.libs.fullcontact4j.http.cardreader.*;
import com.fullcontact.api.libs.fullcontact4j.http.company.CompanyResponse;
import com.fullcontact.api.libs.fullcontact4j.http.email.*;
import com.fullcontact.api.libs.fullcontact4j.http.location.LocationEnrichmentResponse;
import com.fullcontact.api.libs.fullcontact4j.http.location.LocationNormalizationResponse;
import com.fullcontact.api.libs.fullcontact4j.http.misc.AccountStatsResponse;
import com.fullcontact.api.libs.fullcontact4j.http.misc.DisposableEmailResponse;
import com.fullcontact.api.libs.fullcontact4j.http.name.NameParseResponse;
import com.fullcontact.api.libs.fullcontact4j.http.name.NameResponse;
import com.fullcontact.api.libs.fullcontact4j.http.name.NameSimilarityResponse;
import com.fullcontact.api.libs.fullcontact4j.http.name.NameStatsResponse;
import com.fullcontact.api.libs.fullcontact4j.http.name.*;
import com.fullcontact.api.libs.fullcontact4j.http.person.PersonResponse;
import retrofit.Callback;
import retrofit.http.*;
Expand Down Expand Up @@ -68,4 +63,14 @@ public interface FullContactApi {

@GET(FCConstants.API_ENDPOINT_ACCOUNT_STATS)
public void getAccountStats(@QueryMap Map<String, String> opts, Callback<AccountStatsResponse> response);

@GET(FCConstants.API_ENDPOINT_EMAIL_VERIFICATION)
public void getEmailVerification(@QueryMap Map<String, String> opts, Callback<EmailVerificationResponse> response);

@POST(FCConstants.API_ENDPOINT_EMAIL_VERIFICATION_SUBMIT_BATCH)
public void submitEmailVerificationBatch(@Body EmailVerificationBatchRequest.Body body, Callback<EmailVerificationAsyncResponse> response);


@GET(FCConstants.API_ENDPOINT_EMAIL_VERIFICATION_GET_BATCH)
public void getEmailVerificationBatch(@Path("batchId") String batchId, Callback<EmailVerificationAsyncResponse> response);
}
@@ -0,0 +1,53 @@
package com.fullcontact.api.libs.fullcontact4j.http.email;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.*;
import com.fullcontact.api.libs.fullcontact4j.FullContactException;
import com.fullcontact.api.libs.fullcontact4j.http.FCResponse;

import java.io.IOException;

public class EmailVerificationAsyncResponse extends FCResponse {
private static ObjectMapper mapper = new ObjectMapper();

private String batchId;
private String webhookUrl;
private boolean completed;
private EmailVerificationResponse response;

public String getBatchId() {
return batchId;
}

public String getWebhookUrl() {
return webhookUrl;
}

public boolean isCompleted() {
return completed;
}

public EmailVerificationResponse getResponse() {
return response;
}

/**
* Factory method to create a webhook response from json.
* @throws com.fullcontact.api.libs.fullcontact4j.FullContactException if there is a parsing/mapping error.
*/
public static EmailVerificationAsyncResponse fromJson(String json) throws FullContactException {
//Properties not present in the POJO are ignored instead of throwing exceptions
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
//An empty string ("") is interpreted as null
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
try {
return mapper.readValue(json, EmailVerificationAsyncResponse.class);
} catch(JsonMappingException e) {
throw new FullContactException("Failed to convert person json to a response", e);
} catch(JsonParseException e) {
throw new FullContactException("Json is not valid format", e);
} catch(IOException e) {
throw new FullContactException("Unexpected exception when parsing json", e);
}
}
}
@@ -0,0 +1,68 @@
package com.fullcontact.api.libs.fullcontact4j.http.email;

import com.fullcontact.api.libs.fullcontact4j.FullContactApi;
import com.fullcontact.api.libs.fullcontact4j.http.FCRequest;
import retrofit.Callback;

import java.util.*;

public class EmailVerificationBatchRequest extends FCRequest<EmailVerificationAsyncResponse> {

private Body body;

protected EmailVerificationBatchRequest(Body body) {
super(new HashMap<String, String>());
this.body = body;
}

protected void makeRequest(FullContactApi api, Callback<EmailVerificationAsyncResponse> callback) {
api.submitEmailVerificationBatch(body, callback);
}

public static class Body {
private List<String> emails;
private String webhookUrl;

public Body(List<String> emails, String webhookUrl) {
this.emails = emails;
this.webhookUrl = webhookUrl;
}

public List<String> getEmails() {
return emails;
}

public String getWebhookUrl() {
return webhookUrl;
}
}

public static class Builder extends FCRequest.BaseBuilder<Builder, EmailVerificationBatchRequest> {
private List<String> emails;
private String webhookUrl;

protected EmailVerificationBatchRequest createInstance() {
return new EmailVerificationBatchRequest(new Body(emails, webhookUrl));
}

public Builder emails(List<String> emails) {
this.emails = emails;
return this;
}

public Builder webhookUrl(String webhookUrl) {
this.webhookUrl = webhookUrl;
return this;
}

protected void validate() {
if(emails == null || emails.size() == 0) {
throw new IllegalArgumentException("request must include emails");
}
}

protected Builder self() {
return this;
}
}
}
@@ -0,0 +1,117 @@
package com.fullcontact.api.libs.fullcontact4j.http.email;

public class EmailVerificationData {
private String message;
private String address;
private String username;
private String domain;
private boolean corrected;
private EmailVerificationAttributes attributes;
private Boolean cached;
private String person;
private String company;
private boolean sendSafely;

private EmailVerificationData() {
attributes = new EmailVerificationAttributes();
}

public String getMessage() {
return message;
}

public String getAddress() {
return address;
}

public String getUsername() {
return username;
}

public String getDomain() {
return domain;
}

public boolean isCorrected() {
return corrected;
}

public EmailVerificationAttributes getAttributes() {
return attributes;
}

public Boolean getCached() {
return cached;
}

public String getPerson() {
return person;
}

public String getCompany() {
return company;
}

public boolean isSendSafely() {
return sendSafely;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("EmailVerificationData{");
sb.append("message='").append(message).append('\'');
sb.append(", address='").append(address).append('\'');
sb.append(", username='").append(username).append('\'');
sb.append(", domain='").append(domain).append('\'');
sb.append(", corrected=").append(corrected);
sb.append(", attributes=").append(attributes);
sb.append(", cached=").append(cached);
sb.append(", person='").append(person).append('\'');
sb.append(", company='").append(company).append('\'');
sb.append(", sendSafely=").append(sendSafely);
sb.append('}');
return sb.toString();
}

public static class EmailVerificationAttributes {
private boolean validSyntax;
private boolean deliverable;
private boolean catchall;
private boolean risky;
private boolean disposable;

private EmailVerificationAttributes() {}

public boolean isValidSyntax() {
return validSyntax;
}

public boolean isDeliverable() {
return deliverable;
}

public boolean isCatchall() {
return catchall;
}

public boolean isRisky() {
return risky;
}

public boolean isDisposable() {
return disposable;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("EmailVerificationAttributes{");
sb.append("validSyntax=").append(validSyntax);
sb.append(", deliverable=").append(deliverable);
sb.append(", catchall=").append(catchall);
sb.append(", risky=").append(risky);
sb.append(", disposable=").append(disposable);
sb.append('}');
return sb.toString();
}
}
}
@@ -0,0 +1,43 @@
package com.fullcontact.api.libs.fullcontact4j.http.email;

import com.fullcontact.api.libs.fullcontact4j.FullContactApi;
import com.fullcontact.api.libs.fullcontact4j.http.FCRequest;
import retrofit.Callback;

import java.util.HashMap;

public class EmailVerificationGetBatchRequest extends FCRequest<EmailVerificationAsyncResponse> {
private String batchId;

protected EmailVerificationGetBatchRequest(String batchId) {
super(new HashMap<String, String>());
this.batchId = batchId;
}

protected void makeRequest(FullContactApi api, Callback<EmailVerificationAsyncResponse> callback) {
api.getEmailVerificationBatch(batchId, callback);
}

public static class Builder extends BaseBuilder<Builder, EmailVerificationGetBatchRequest> {
private String batchId;

public Builder batchId(String batchId) {
this.batchId = batchId;
return this;
}

protected EmailVerificationGetBatchRequest createInstance() {
return new EmailVerificationGetBatchRequest(batchId);
}

protected void validate() {
if(batchId == null) {
throw new IllegalArgumentException("batchId is required");
}
}

protected Builder self() {
return this;
}
}
}

0 comments on commit 940403b

Please sign in to comment.