Skip to content

Commit 0b58f2f

Browse files
authored
update Java example to use optout policy exposed by the Java SDK; fix routing issues on error (#14)
* fix routing issues on error * update Java example to use optout policy exposed by the Java SDK
1 parent 1e2a901 commit 0b58f2f

File tree

2 files changed

+45
-35
lines changed

2 files changed

+45
-35
lines changed

publisher/uid2-java-test-site/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
<dependency>
8383
<groupId>com.uid2</groupId>
8484
<artifactId>uid2-client</artifactId>
85-
<version>4.0.0-SNAPSHOT</version>
85+
<version>4.2.4-dcf7ac1ce6</version>
8686
</dependency>
8787
</dependencies>
8888

publisher/uid2-java-test-site/src/main/java/com/uid2/testsite/MainVerticle.java

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ private void render(RoutingContext ctx, String templateFileName, JsonObject json
3636
private static final String UID2_BASE_URL = System.getenv("UID2_BASE_URL");
3737
private static final String UID2_API_KEY = System.getenv("UID2_API_KEY");
3838
private static final String UID2_SECRET_KEY = System.getenv("UID2_SECRET_KEY");
39+
private static final String PREFIX_STANDARD = "/standard";
40+
private static final String PREFIX_BASIC = "/basic";
3941
private final PublisherUid2Helper publisherUid2Helper = new PublisherUid2Helper(UID2_SECRET_KEY); //for advanced usage (Do your own HTTP)
4042
private final PublisherUid2Client publisherUid2Client = new PublisherUid2Client(UID2_BASE_URL, UID2_API_KEY, UID2_SECRET_KEY); //for basic usage (SDK does HTTP)
4143

@@ -49,12 +51,12 @@ private int GetPort() {
4951
}
5052
}
5153

52-
private void renderError(HttpResponse<Buffer> response, String errorMessage, RoutingContext ctx) {
54+
private void renderError(HttpResponse<Buffer> response, String errorMessage, RoutingContext ctx, String prefix) {
5355
JsonObject json = new JsonObject().put("error", errorMessage);
5456
if (response != null) {
55-
json.put("responseStatus", response.statusCode()).put("response", response.bodyAsString());
57+
json.put("prefix", prefix).put("responseStatus", response.statusCode()).put("response", response.bodyAsString());
5658
} else {
57-
json.put("responseStatus", "<null>").put("response", "<null>");
59+
json.put("prefix", prefix).put("responseStatus", "<null>").put("response", "<null>");
5860
}
5961

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

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

69-
setIdentity(ctx, identity.getJsonString());
70-
ctx.redirect("/basic/");
73+
setIdentity(ctx, tokenGenerateResponse.getIdentityJsonString());
74+
ctx.redirect(PREFIX_BASIC + "/");
7175
} catch (RuntimeException e) {
72-
renderError(null, e.getMessage(), ctx);
76+
renderError(null, e.getMessage(), ctx, PREFIX_BASIC);
7377
}
7478
}
7579

7680

77-
private void generateTokenAdvancedUsage(RoutingContext ctx, String email, String redirect) {
81+
private void generateTokenAdvancedUsage(RoutingContext ctx, String email, String redirect, String prefix) {
7882
try {
79-
EnvelopeV2 envelope = publisherUid2Helper.createEnvelopeForTokenGenerateRequest(TokenGenerateInput.fromEmail(email));
83+
EnvelopeV2 envelope = publisherUid2Helper.createEnvelopeForTokenGenerateRequest(TokenGenerateInput.fromEmail(email).doNotGenerateTokensForOptedOut()); //UID2
84+
// EUID's input would look like this:
85+
// TokenGenerateInput.fromEmail(email).withTransparencyAndConsentString("CPhJRpMPhJRpMABAMBFRACBoALAAAEJAAIYgAKwAQAKgArABAAqAAA").doNotGenerateTokensForOptedOut();
8086

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

9298
try {
93-
IdentityTokens identity = publisherUid2Helper.createIdentityfromTokenGenerateResponse(response.bodyAsString(), envelope);
99+
TokenGenerateResponse tokenGenerateResponse = publisherUid2Helper.createTokenGenerateResponse(response.bodyAsString(), envelope);
94100

95-
setIdentity(ctx, identity.getJsonString());
96-
ctx.redirect(redirect);
101+
setIdentity(ctx, tokenGenerateResponse.getIdentityJsonString());
102+
if (tokenGenerateResponse.getIdentityJsonString() != null)
103+
ctx.redirect(redirect);
104+
else
105+
renderError(null, "User has opted out", ctx, "");
97106
} catch (RuntimeException e) {
98-
renderError(null, e.getMessage(), ctx);
107+
renderError(null, e.getMessage(), ctx, "");
99108
}
100109
})
101-
.onFailure(err -> renderError(null, err.getMessage(), ctx));
110+
.onFailure(err -> renderError(null, err.getMessage(), ctx, prefix));
102111
} catch (RuntimeException e) {
103-
renderError(null, e.getMessage(), ctx);
112+
renderError(null, e.getMessage(), ctx, prefix);
104113
}
105114
}
106115

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

123132

124-
private void processRefreshIdentityResponse(HttpResponse<Buffer> encryptedResponse, RoutingContext ctx, IdentityTokens identity) {
133+
private void processRefreshIdentityResponse(HttpResponse<Buffer> encryptedResponse, RoutingContext ctx, IdentityTokens identity, String prefix) {
125134
if (encryptedResponse.statusCode() != 200) {
126-
renderError(encryptedResponse, "HTTP status code is not 200", ctx);
135+
renderError(encryptedResponse, "HTTP status code is not 200", ctx, prefix);
127136
return;
128137
}
129138

130139
try {
131140
TokenRefreshResponse tokenRefreshResponse = PublisherUid2Helper.createTokenRefreshResponse(encryptedResponse.bodyAsString(), identity);
132141
setIdentity(ctx, tokenRefreshResponse.getIdentityJsonString());
133142
} catch (RuntimeException e) {
134-
renderError(null, e.getMessage(), ctx);
143+
renderError(null, e.getMessage(), ctx, prefix);
135144
}
136145
}
137146

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

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

143153
if (basicUsage) {
144154
try {
@@ -151,7 +161,7 @@ private Future<Void> refreshIdentity(RoutingContext ctx, boolean basicUsage) {
151161
else
152162
promise.complete();
153163
} catch (RuntimeException e) {
154-
renderError(null, e.getMessage(), ctx);
164+
renderError(null, e.getMessage(), ctx, prefix);
155165
}
156166
} else { //advanced usage
157167
String refreshToken = identity.getRefreshToken();
@@ -162,14 +172,14 @@ private Future<Void> refreshIdentity(RoutingContext ctx, boolean basicUsage) {
162172
.putHeader("X-UID2-Client-Version", PublisherUid2Helper.getVersionHttpHeader())
163173
.sendBuffer(Buffer.buffer(refreshToken))
164174
.onSuccess(encryptedResponse -> {
165-
processRefreshIdentityResponse(encryptedResponse, ctx, identity);
175+
processRefreshIdentityResponse(encryptedResponse, ctx, identity, prefix);
166176
if (getIdentity(ctx) == null)
167177
promise.fail("no identity"); //eg opt out
168178
else
169179
promise.complete();
170180
})
171181
.onFailure(err -> {
172-
renderError(null, err.getMessage(), ctx);
182+
renderError(null, err.getMessage(), ctx, prefix);
173183
promise.fail("something went wrong" + err.getMessage());
174184
});
175185
}
@@ -200,7 +210,7 @@ private Future<Void> verifyIdentity(RoutingContext ctx, boolean basicUsage) {
200210
}
201211

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

205215
verifyIdentity(ctx, basicUsage)
206216
.onSuccess(v -> ctx.next())
@@ -234,7 +244,7 @@ private Router createRoutesSetupForAdvancedUsageServerOnly() {
234244
);
235245

236246
router.post("/login").handler(ctx ->
237-
generateTokenAdvancedUsage(ctx, ctx.request().getFormAttribute("email"), "/")
247+
generateTokenAdvancedUsage(ctx, ctx.request().getFormAttribute("email"), "/", "")
238248
);
239249

240250
router.get("/logout").handler(ctx -> {
@@ -264,17 +274,17 @@ private Router createRoutesSetupForAdvancedUsageServerOnly() {
264274
return router;
265275
}
266276

267-
private Router createRoutesSetupForAdvancedUsageStandardIntegration() {
277+
private Router createRoutesSetupForAdvancedUsageStandardIntegration() {
268278
Router standardIntegration = Router.router(vertx);
269279

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

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

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

279289
return standardIntegration;
280290
}
@@ -291,33 +301,33 @@ private Router createRouteSetupForBasicUsageServerOnly() {
291301
.onSuccess(v -> ctx.redirect("/"))
292302
.onFailure(v -> {
293303
setIdentity(ctx, null);
294-
render(ctx, "templates/login.ftl", new JsonObject().put("redirect", "/basic/login"));
304+
render(ctx, "templates/login.ftl", new JsonObject().put("redirect", PREFIX_BASIC + "/login"));
295305
})
296306
);
297307

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

300310
router.get("/logout").handler(ctx -> {
301311
setIdentity(ctx, null);
302-
ctx.redirect("/basic/login");
312+
ctx.redirect(PREFIX_BASIC + "/login");
303313
});
304314

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

309319
router.get("/").handler(ctx -> {
310-
JsonObject jsonObject = getIdentityForTemplate(ctx, "/basic");
320+
JsonObject jsonObject = getIdentityForTemplate(ctx, PREFIX_BASIC);
311321
render(ctx, "templates/index.ftl", jsonObject);
312322
});
313323

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

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

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

337347
Router parentRouter = Router.router(vertx);
338348
parentRouter.route("/*").subRouter(serverOnlyRouter);
339-
parentRouter.route("/standard/*").subRouter(standardIntegrationRouter);
340-
parentRouter.route("/basic/*").subRouter(serverOnlyWithBasicUsage);
349+
parentRouter.route(PREFIX_STANDARD + "/*").subRouter(standardIntegrationRouter);
350+
parentRouter.route(PREFIX_BASIC +"/*").subRouter(serverOnlyWithBasicUsage);
341351

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

0 commit comments

Comments
 (0)