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 publisher/uid2-java-test-site/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
<dependency>
<groupId>com.uid2</groupId>
<artifactId>uid2-client</artifactId>
<version>4.0.0-SNAPSHOT</version>
<version>4.2.4-dcf7ac1ce6</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ private void render(RoutingContext ctx, String templateFileName, JsonObject json
private static final String UID2_BASE_URL = System.getenv("UID2_BASE_URL");
private static final String UID2_API_KEY = System.getenv("UID2_API_KEY");
private static final String UID2_SECRET_KEY = System.getenv("UID2_SECRET_KEY");
private static final String PREFIX_STANDARD = "/standard";
private static final String PREFIX_BASIC = "/basic";
private final PublisherUid2Helper publisherUid2Helper = new PublisherUid2Helper(UID2_SECRET_KEY); //for advanced usage (Do your own HTTP)
private final PublisherUid2Client publisherUid2Client = new PublisherUid2Client(UID2_BASE_URL, UID2_API_KEY, UID2_SECRET_KEY); //for basic usage (SDK does HTTP)

Expand All @@ -49,12 +51,12 @@ private int GetPort() {
}
}

private void renderError(HttpResponse<Buffer> response, String errorMessage, RoutingContext ctx) {
private void renderError(HttpResponse<Buffer> response, String errorMessage, RoutingContext ctx, String prefix) {
JsonObject json = new JsonObject().put("error", errorMessage);
if (response != null) {
json.put("responseStatus", response.statusCode()).put("response", response.bodyAsString());
json.put("prefix", prefix).put("responseStatus", response.statusCode()).put("response", response.bodyAsString());
} else {
json.put("responseStatus", "<null>").put("response", "<null>");
json.put("prefix", prefix).put("responseStatus", "<null>").put("response", "<null>");
}

render(ctx, "templates/error.ftl", json);
Expand All @@ -64,19 +66,23 @@ private void renderError(HttpResponse<Buffer> response, String errorMessage, Rou

private void generateTokenBasicUsage(RoutingContext ctx, String email) {
try {
IdentityTokens identity = publisherUid2Client.generateToken(TokenGenerateInput.fromEmail(email));
TokenGenerateResponse tokenGenerateResponse = publisherUid2Client.generateTokenResponse(TokenGenerateInput.fromEmail(email).doNotGenerateTokensForOptedOut()); //UID2
// EUID's input would look like this:
// TokenGenerateInput.fromEmail(email).withTransparencyAndConsentString("CPhJRpMPhJRpMABAMBFRACBoALAAAEJAAIYgAKwAQAKgArABAAqAAA").doNotGenerateTokensForOptedOut();

setIdentity(ctx, identity.getJsonString());
ctx.redirect("/basic/");
setIdentity(ctx, tokenGenerateResponse.getIdentityJsonString());
ctx.redirect(PREFIX_BASIC + "/");
} catch (RuntimeException e) {
renderError(null, e.getMessage(), ctx);
renderError(null, e.getMessage(), ctx, PREFIX_BASIC);
}
}


private void generateTokenAdvancedUsage(RoutingContext ctx, String email, String redirect) {
private void generateTokenAdvancedUsage(RoutingContext ctx, String email, String redirect, String prefix) {
try {
EnvelopeV2 envelope = publisherUid2Helper.createEnvelopeForTokenGenerateRequest(TokenGenerateInput.fromEmail(email));
EnvelopeV2 envelope = publisherUid2Helper.createEnvelopeForTokenGenerateRequest(TokenGenerateInput.fromEmail(email).doNotGenerateTokensForOptedOut()); //UID2
// EUID's input would look like this:
// TokenGenerateInput.fromEmail(email).withTransparencyAndConsentString("CPhJRpMPhJRpMABAMBFRACBoALAAAEJAAIYgAKwAQAKgArABAAqAAA").doNotGenerateTokensForOptedOut();

webClient
.postAbs(UID2_BASE_URL + "/v2/token/generate")
Expand All @@ -85,22 +91,25 @@ private void generateTokenAdvancedUsage(RoutingContext ctx, String email, String
.sendBuffer(Buffer.buffer(envelope.getEnvelope()))
.onSuccess(response -> {
if (response.statusCode() != 200) {
renderError(response, "HTTP status code is not 200", ctx);
renderError(response, "HTTP status code is not 200", ctx, "");
return;
}

try {
IdentityTokens identity = publisherUid2Helper.createIdentityfromTokenGenerateResponse(response.bodyAsString(), envelope);
TokenGenerateResponse tokenGenerateResponse = publisherUid2Helper.createTokenGenerateResponse(response.bodyAsString(), envelope);

setIdentity(ctx, identity.getJsonString());
ctx.redirect(redirect);
setIdentity(ctx, tokenGenerateResponse.getIdentityJsonString());
if (tokenGenerateResponse.getIdentityJsonString() != null)
ctx.redirect(redirect);
else
renderError(null, "User has opted out", ctx, "");
} catch (RuntimeException e) {
renderError(null, e.getMessage(), ctx);
renderError(null, e.getMessage(), ctx, "");
}
})
.onFailure(err -> renderError(null, err.getMessage(), ctx));
.onFailure(err -> renderError(null, err.getMessage(), ctx, prefix));
} catch (RuntimeException e) {
renderError(null, e.getMessage(), ctx);
renderError(null, e.getMessage(), ctx, prefix);
}
}

Expand All @@ -121,24 +130,25 @@ private void setIdentity(RoutingContext ctx, String jsonResponse) {
}


private void processRefreshIdentityResponse(HttpResponse<Buffer> encryptedResponse, RoutingContext ctx, IdentityTokens identity) {
private void processRefreshIdentityResponse(HttpResponse<Buffer> encryptedResponse, RoutingContext ctx, IdentityTokens identity, String prefix) {
if (encryptedResponse.statusCode() != 200) {
renderError(encryptedResponse, "HTTP status code is not 200", ctx);
renderError(encryptedResponse, "HTTP status code is not 200", ctx, prefix);
return;
}

try {
TokenRefreshResponse tokenRefreshResponse = PublisherUid2Helper.createTokenRefreshResponse(encryptedResponse.bodyAsString(), identity);
setIdentity(ctx, tokenRefreshResponse.getIdentityJsonString());
} catch (RuntimeException e) {
renderError(null, e.getMessage(), ctx);
renderError(null, e.getMessage(), ctx, prefix);
}
}

private Future<Void> refreshIdentity(RoutingContext ctx, boolean basicUsage) {
Promise<Void> promise = Promise.promise();

final IdentityTokens identity = getIdentity(ctx);
final String prefix = basicUsage ? PREFIX_BASIC : "";

if (basicUsage) {
try {
Expand All @@ -151,7 +161,7 @@ private Future<Void> refreshIdentity(RoutingContext ctx, boolean basicUsage) {
else
promise.complete();
} catch (RuntimeException e) {
renderError(null, e.getMessage(), ctx);
renderError(null, e.getMessage(), ctx, prefix);
}
} else { //advanced usage
String refreshToken = identity.getRefreshToken();
Expand All @@ -162,14 +172,14 @@ private Future<Void> refreshIdentity(RoutingContext ctx, boolean basicUsage) {
.putHeader("X-UID2-Client-Version", PublisherUid2Helper.getVersionHttpHeader())
.sendBuffer(Buffer.buffer(refreshToken))
.onSuccess(encryptedResponse -> {
processRefreshIdentityResponse(encryptedResponse, ctx, identity);
processRefreshIdentityResponse(encryptedResponse, ctx, identity, prefix);
if (getIdentity(ctx) == null)
promise.fail("no identity"); //eg opt out
else
promise.complete();
})
.onFailure(err -> {
renderError(null, err.getMessage(), ctx);
renderError(null, err.getMessage(), ctx, prefix);
promise.fail("something went wrong" + err.getMessage());
});
}
Expand Down Expand Up @@ -200,7 +210,7 @@ private Future<Void> verifyIdentity(RoutingContext ctx, boolean basicUsage) {
}

void protect(RoutingContext ctx, boolean basicUsage) {
final String redirect = basicUsage ? "/basic/login" : "/login";
final String redirect = basicUsage ? PREFIX_BASIC + "/login" : "/login";

verifyIdentity(ctx, basicUsage)
.onSuccess(v -> ctx.next())
Expand Down Expand Up @@ -234,7 +244,7 @@ private Router createRoutesSetupForAdvancedUsageServerOnly() {
);

router.post("/login").handler(ctx ->
generateTokenAdvancedUsage(ctx, ctx.request().getFormAttribute("email"), "/")
generateTokenAdvancedUsage(ctx, ctx.request().getFormAttribute("email"), "/", "")
);

router.get("/logout").handler(ctx -> {
Expand Down Expand Up @@ -264,17 +274,17 @@ private Router createRoutesSetupForAdvancedUsageServerOnly() {
return router;
}

private Router createRoutesSetupForAdvancedUsageStandardIntegration() {
private Router createRoutesSetupForAdvancedUsageStandardIntegration() {
Router standardIntegration = Router.router(vertx);

standardIntegration.get("/").handler(ctx ->
render(ctx, "templates-standard-integration/index.ftl", new JsonObject().put("uid2BaseUrl", UID2_BASE_URL)));

standardIntegration.post("/login").handler(ctx ->
generateTokenAdvancedUsage(ctx, ctx.request().getFormAttribute("email"), "/standard/login"));
generateTokenAdvancedUsage(ctx, ctx.request().getFormAttribute("email"), PREFIX_STANDARD + "/login", PREFIX_STANDARD));

standardIntegration.get("/login").handler(ctx ->
render(ctx, "templates-standard-integration/login.ftl", getIdentityForTemplate(ctx, "/standard").put("uid2BaseUrl", UID2_BASE_URL)));
render(ctx, "templates-standard-integration/login.ftl", getIdentityForTemplate(ctx, PREFIX_STANDARD).put("uid2BaseUrl", UID2_BASE_URL)));

return standardIntegration;
}
Expand All @@ -291,33 +301,33 @@ private Router createRouteSetupForBasicUsageServerOnly() {
.onSuccess(v -> ctx.redirect("/"))
.onFailure(v -> {
setIdentity(ctx, null);
render(ctx, "templates/login.ftl", new JsonObject().put("redirect", "/basic/login"));
render(ctx, "templates/login.ftl", new JsonObject().put("redirect", PREFIX_BASIC + "/login"));
})
);

router.post("/login").handler(ctx -> generateTokenBasicUsage(ctx, ctx.request().getFormAttribute("email")));

router.get("/logout").handler(ctx -> {
setIdentity(ctx, null);
ctx.redirect("/basic/login");
ctx.redirect(PREFIX_BASIC + "/login");
});

router.get("/").handler(ctx -> protect(ctx, true));
router.get("/content1").handler(ctx -> protect(ctx, true));
router.get("/content2").handler(ctx -> protect(ctx, true));

router.get("/").handler(ctx -> {
JsonObject jsonObject = getIdentityForTemplate(ctx, "/basic");
JsonObject jsonObject = getIdentityForTemplate(ctx, PREFIX_BASIC);
render(ctx, "templates/index.ftl", jsonObject);
});

router.get("/content1").handler(ctx -> {
JsonObject jsonObject = getIdentityForTemplate(ctx, "/basic").put("content", "First Sample Content");
JsonObject jsonObject = getIdentityForTemplate(ctx, PREFIX_BASIC).put("content", "First Sample Content");
render(ctx, "templates/content.ftl", jsonObject);
});

router.get("/content2").handler(ctx -> {
JsonObject jsonObject = getIdentityForTemplate(ctx, "/basic").put("content", "Second Sample Content");
JsonObject jsonObject = getIdentityForTemplate(ctx, PREFIX_BASIC).put("content", "Second Sample Content");
render(ctx, "templates/content.ftl", jsonObject);
});

Expand All @@ -336,8 +346,8 @@ public void start(Promise<Void> startPromise) {

Router parentRouter = Router.router(vertx);
parentRouter.route("/*").subRouter(serverOnlyRouter);
parentRouter.route("/standard/*").subRouter(standardIntegrationRouter);
parentRouter.route("/basic/*").subRouter(serverOnlyWithBasicUsage);
parentRouter.route(PREFIX_STANDARD + "/*").subRouter(standardIntegrationRouter);
parentRouter.route(PREFIX_BASIC +"/*").subRouter(serverOnlyWithBasicUsage);

vertx.createHttpServer().requestHandler(parentRouter).listen(GetPort())
.onSuccess(server -> System.out.println("HTTP server started on http://localhost:" + server.actualPort()))
Expand Down